port to bsdi / TOUPPER problem

Tim Berners-Lee <timbl@www3.cern.ch>
Date: Fri, 30 Oct 92 12:01:16 +0100
From: Tim Berners-Lee <timbl@www3.cern.ch>
Message-id: <9210301101.AA06754@www3.cern.ch>
To: Edward Vielmetti <emv@msen.com>
Subject: port to bsdi / TOUPPER problem
Cc: www-talk@nxoc01.cern.ch
Reply-To: timbl@nxoc01.cern.ch

>  Hi.  I am porting WWW to BSDI.  So far mostly so good, here are some
>  notes.

Duuhh. What's BSDI?  {:-O

>  There are some stray dependencies in the Line Mode makefiles that point
>  hard coded paths at /tmp for making stuff.  /tmp here is tiny, so I
>  put the stuff in $(HOME)/tmp, but that didn't quite do the job.

It is a question of changing the ONJ macro to point to somewhere where
there is space. It used to be the source directory, but some people
want to build separately from a read-only source mount. So we put the OBJ
macros in.

>  It took some amount of fiddling to get everything to build in the
>  right place, I hacked at it until it all compiled ok but will have
>  to go back and see what exactly it was that I did...

If you could mail me back the diffs I'll try to get them into
the next version.

>  HTFile.c didn't compile until I commented out one of the two times 

>  that "tcp.h" was included - the compiler complained about a duplicate
>  definition of "struct stat".

Ooops.. sorry, fixed.  I think you mean that <stat.h> was included
explicitly once and once implcitly via  "tcp.h".

>  After all that it compiles fine and seems to work, and 'www -source'
>  prints out what looks like real genuine HTML sources.  However, it
>  appears that there's some critical place where TOUPPER is not working
>  right, since the lower-case <a href=foo:bar>foobar</a> tags don't
>  get recognized, and the upper-case <TITLE>foobar</TITLE> tags do.  

>  This kind of ruins the hypertext effect :)

That is official BSD for you: toupper() doesn't work unless the isalpha()
is true. You need to turn on the macros at the bottom of tcp.h
for your platform.  What is the system-specific predefined cpp macro
which we can #ifdef on? So far we have:

	#if defined(pyr) || defined(mips)
	  /* Pyramid and Mips can't uppercase non-alpha */
	#define TOLOWER(c) (isupper(c) ? tolower(c) : (c))
	#define TOUPPER(c) (islower(c) ? toupper(c) : (c))
	#define TOLOWER(c) tolower(c)
	#define TOUPPER(c) toupper(c)
	#endif /* pyr || mips */

Thanks for the comments....