Strip Club v0.7.5
Released 06/02/2004
Copyright 2004 Racercks Productions

Coding - Benjamin Cutler (cutlerbc)
Windows Installers Provided by - Brian Rupe (hazer)
Testers - Brian Rupe (hazer), Sara Leen (sarachan)

Strip Club is an Open Source project, protected by the GPL. See COPYING
for details. The pre-compiled Windows version includes statically linked
code from SDL_net, fltk, and fltk_images, all of which are GPL or LGPL
libraries.

This program comes with ABSOLUTELY NO WARRANTY AT ALL. If it causes your
computer to burst into flame, summons demons to attack your dog, or makes
you stub your toe on the desk, it's not my fault. Use at your own risk.

Compiling-

If you're compiling this from source, you're going to need:

* SDL, SDL_net		(http://www.libsdl.org/)
* fltk, fltk_images	(http://www.fltk.org/)
* pcre			(http://www.pcre.org/)
* libpng		(http://www.libpng.org/)
* libjpeg		(http://www.ijg.org/)

I can't guarantee any of the makefiles will work, but I can't
imagine why they'd break assuming everything it would be looking for is
installed. See INSTALL for details.

Initial Install-

If you're using the precompiled Windows version, and you're getting DLL 
errors, go to the homepage at http://stripclub.sf.net and get the DLL pack. 
If that still doesn't solve your problem submit a bug report.

After you get the program running, either import one or more of the provided
.comic files or add your own if the comic you like doesn't have one provided.

Using a Proxy-

If you're behind a proxy, there are two ways you can get Strip Club to work
with it. You can set the http_proxy environment variable before running the 
program, or configure it in the Preferences window. Strip Club will parse it 
and use it for a proxy. If it exists, the environment variable takes 
precedence over the configuration setting. If you don't need a proxy at all,
leave them both blank and Strip Club will use normal HTTP requests.

Proper setting for either is:

http://proxy-host:port

(eg http://proxy.company.com:8080)

Downloading New Comics-

Simply select "Update Comics" from the file menu. This will download a cache
file from the Strip Club site, check for updated .comic files, and download
them to a special cache dir. ("$HOME/.stripclub/comics" on *nix-like systems,
or just "comics" for you Windows people.) This will not overwrite any custom
comic files unless you've saved them into this cache folder. (So don't do 
that.) The remote comic cache file is updated every six hours, if there are 
any new .comics available.

Adding Comics-

The best way so far to add in your own comics is to use the "Add New Comic" 
menu item. You can hand edit the prefs file, or hand edit a .comic file and 
try to import that, but be warned the import code is very non-robust and will 
break horribly if it's fed an incorrectly formatted .comic file. The .prefs 
code is more robust but still prone to errors. Far and away the best option 
is to use the menu item. I will be releasing new .comic files fairly 
regularly, by request. Also feel free to submit your own through the sf.net 
project site.

Comic Settings-

Anything marked with a * is not exported by the program.

Name: The FULL Name for the comic, used to display the menu item and the title
bar (eg "Sluggy Freelance")
Base URL: A static URL pointing to the "latest day", loaded when you switch
comics or hit the "Latest" button
First URL: A static URL pointing to the "first day", loaded when you hit the
"First" button
Image Pattern: See below.
Previous/Next Link Pattern: See below.
Default Relative URL: A "template" value used for the "Open Relative URL"
menu option. Can be set to whatever, but is meant to be informative.
*User Agent: Some comics reject any User Agent string that doesn't look like
a web browser. If this is true for this comic, enter something here, either 
manually or use one of the provided alternatives.
Category: Purely informational categorization, to help keep the Comics menu
organized. Note that you may sub-categorize by placing / characters in the
Category name, for example "Games/RPG" or "Anime/Fantasy".
Donation/Store Link: Links that will be opened by the appropriate menu item
for the comic in question. If left blank, the program will not create the
menu item. Clicking the "Paypal" button will fill in the Donation field with
a template that is only missing the appropriate e-mail address. Note that for
compatibility reasons, you must replace all "&" in the fields with "\&", or
they will not work properly on Linux.

Image Patterns-

Usually all you'll have to change is the "(/comics/... portion to whatever 
the site in question uses for it's comic image links. If you're getting ad 
banners or the like, you're not being specific enough. If you're not 
getting any images at all, it's wrong. Searches are NOT CASE SENSITIVE. 
One sticking point: Remember that to a regexp, "." means MATCH ANY ONE 
CHARACTER, not match a period. This usually won't be a problem, because 
it'll match a period anyway.  Also, "*" is not the wildcard you might 
expect. To match an arbitrary string, use ".*" where you'd use "*". 
(Technically, ".*" means "match zero or more characters that are not 
newlines", but the image/link parser filters out newline characters.) Also 
remember to keep the inside of src="" in parentheses, this is how the image 
searcher knows where the URL it's looking for is.

Example:

Img tag looks like this: 
<img blah src="/comics/YYYYMMDD.jpg" blah>

Your regexp should look like: 
<img .*src="(/comics/.*(png|jpg|gif))".*>

(png|jpg|gif) means "match either png, jpg, or gif". Some comics use more
than one format, so it's a good idea to leave this in.

Example 2:

Img tag looks like this:
<img blah src="http://someserver.com/somedir/comicYYYYMMDD.jpg" blah>

Your regexp should look like:
<img .*src="(http://someserver.com/somedir/comic.*(png|jpg|gif))".*>

Archive Support-

For the Prev/Next regexps, what you enter in depends on what the links
look like. The default is tag based searching. For this, enter in an 
expression that will find a unique tag JUST AFTER the link tag. The link
searcher will then assign whichever was the LAST LINK tag it read for
whichever link it's looking for.

Example:

Link looks like:
<a href="d/YYYYMMDD.html"><img blah src="previous_day.gif" blah></a>

Your regexp should look like:
<img .*src="previous_day.gif".*>

So this set of tags:
<a href="d/20020101.html"><img blah src="previous_day.gif" blah></a>

Will pull out "d/20020101.html". Perfect.

The other type of link search (text-based) is for when the links use text
instead of a tag. You'll still be using a regexp, but it might only have
to be a regular ol' string.

Example: (from GUComics)

Link looks like:
<a href="archives/view.php?cdate=YYYYMMDD">Previous Comic</a>

Your regexp should look like:
Previous Comic

Yup, it's that simple.

The last type of link search (map-based) is a little different. You specify
a regexp that will match the WHOLE tag, and put () around where the link 
is. So far the only comic I've seen that uses this method is User Friendly,
but I'm sure there's at least one other.

Example:

Tag looks like:

<area shape="rect" href="/cartoons/?id=19971117&mode=classic" 
	coords="161,0 238,80" alt="Previous Cartoon">
(all one line, but seperated since it's long)

Regexp should look like:

<area .*href="(.*?)" .*alt="Previous Cartoon">

(The "?" in the pattern specifies that it should stop the FIRST time it
sees a ". It's complex, but just make sure you put it there if you need
to construct one of these.)

Output Window-

The Output Window and it's tabs are there to keep you informed on what the 
program is doing and any errors it may be encountering. The "Out" tab is 
information you should probably know, but the others are mostly there for 
debugging purposes, probably not very useful to the average user. The other
tabs also don't produce any output unless you've turned on Debugging info
in the File menu.

Download Mode-

There are three choices here. "Offline" means just that, it will not attempt
to download anything at all, and will complain if told to view something it
cannot generate from local info. "Missing" means it will only download files 
if it is unable to find a local copy. "Check" means that it will check the
remote modification time of any HTML before downloading, and will only
download if the page has been updated, or if it can't tell in the case of
generated pages. When you first switch to a comic, the program will
temporarily switch to "Check" if in "Missing" mode, as the front page can
change pretty often. Hitting "Refresh" now causes the local copy of any
HTML info to be deleted, forcing a redownload. Images will still only be
downloaded if the program can detect changes, however.

Bug Reporting-

Use the Bug link on the project page.

If the program does something odd, or crashes, INCLUDE debug.log with your 
bug report. The program not finding any images/links in a file is not a bug. 
If you need help making regexps for the comic in question, feel free to 
submit a feature request and I'll see what I can do.

If you somehow manage to trigger the "Fatal Error: HTTP Request too long!",
PLEASE PLEASE PLEASE let me know how. The request buffer is way, way bigger
than it has to be, and should only be overflowed by a URL that's about 1900
characters long. I don't know of any sites that would even generate such
a monstrosity.

Notes and Known Problems-

On Linux systems, the FLTK prefs files are stored in 
~/.fltk/racercksproductions/ if for some reason you need to look at them. 
On Windows systems, it depends on which version of Windows you're running, 
so your best bet is to search for "stripclub.prefs".

Keenspace rejects the standard User-Agent used by the program, so make sure
to change it to a browser string in the Edit window, some defaults are
provided. I leave this blank in the comic files because I'd rather people
chose what they'd normally use rather than assuming everybody uses IE or
Mozilla.

The host cache does not do ANY checking to see if an old name has become
stale, so if you experience problems with a particular comic, try refreshing
the cache from the File menu. This causes the program to force a relookup of
all hosts in the cache. If this doesn't solve it, the comic itself may be 
down. If it works fine in your browser, send a bug report and I'll see if I 
can figure it out.

To use the "Donate" and "Store" links on Linux, make sure you tell the
program which browser it should spawn. (Use the File menu item.)
Windows people probably don't have to worry about this, since "start <URL>" 
will spawn your default browser. The "Paypal" button will fill in the field 
with a URL that's missing the e-mail, but that should be easy enough to fill 
in. Note that some of the old comic files use "\&" instead of just "&". This
was due to a compatibility problem that I was unsure of how to fix regarding
Linux console commands. It's since been fixed. New comic files should not
use this syntax, but the old syntax still works for backwards compatibility.

The archive browsing function will not work with any comic that:

* Has a link that ALWAYS points to the most recent comic, but this page 
lacks predictable archive navigation, AND has no static "First" link, such 
as comic archives that only go back a month or so (example: ucomics.com) no 
easy way to fix this (you could still use "Relative URL", except for below)
* Uses takeover ads within its archives (ucomics.com, again)
* Uses javascript or forms to navigate (daybydaycartoon.com)

The program will NOT at present work AT ALL with any comics that:

* Use weird image links that don't translate well into filenames (examples: 
www.reallifecomics.com, www.machall.com)
* Use Javascript to display their images (example: www.wtfcomics.com)
* Are shockwave/flash comics (I'm not writing a shockwave player)
* Don't have the images inline, but as seperate links (example: 
www.angryflower.com)
* Require logins or cookies to browse through (example: Warpkeen)

Features I will be adding (in order of preference, NOT likelihood):

* Disk Quota to limit how much space your cache takes up
* Downloading of comic-relevant text (example: PA's newsposts)
* Support for animated GIFs (difficult...)
* Icons for the program and the windows (Anybody want to draw me one?)

Websites:

Main Website: http://stripclub.sf.net/
Project Site: http://sf.net/projects/stripclub/

Enjoy!
