> I double checked my changes to asciiconv in db.c.
> To test it, I used Furry's New thalos area for circle 3.0p6.
> I booted the mud using lowercase ascii, and
> the extra flags were glow, magic, !mage, !cleric, !thief.
>
> changing them to uppercase, I got different results when I rebooted.
Yes, so? You're not supposed to get the same results with upper-case and
lower-case flags!
> >From my understanding of the function, you are calculating the
> flag, and the first if statement is basing it's end-result with the
> char 'a'.
>
> If *p is uppercase, wouldn't you have to add 32 to the *p to
> make it equivalent to a *p value if using lowercase?
I don't think you understand what the code does.
Here is the code:
if (islower(*p))
flags |= 1 << (*p - 'a');
else if (isupper(*p))
flags |= 1 << (26 + (*p - 'A'));
Now, I think you are (incorrectly) in interpreting this code as trying to
convert an upper-case flag to be the same value as a lower-case flag.
That's not what the code is doing. If I wanted the world files to be able
to accept bother upper- and lower-case flags as equivalent, I would have
written:
flags |= 1 << (LOWER(*p) - 'a');
...and just made everything lower-case, and not messed around with testing
whether or not the flag is upper- or lower-case and adding an appropriate
offset. That would be silly.
The purpose of the asciiflag_conv code is to allow flags a-z to represent
flags 1<<0 through 1<<25, and A-F represent 1<<26 through 1<<31.
> 32+... worked for me
> Just letting you guys know about something that I came across
> from reading the CHANGES file.
I assume you're referring to the comment:
2/24/95 JE Fixed asciiflag_conv in db.c for uppercase flags (typo,
'a' instead of 'A').
That's because I had originally written the code, incorrectly, in patchlevel 5:
if (islower(*p))
flags |= 1 << (*p - 'a');
else if (isupper(*p))
flags |= 1 << (26 + (*p - 'a'));
Note that in the isupper() case, I've written 'a' and not 'A' as it should be.
Jeremy
This archive was generated by hypermail 2b30 : 12/07/00 PST