[Coco] help with C problem
Bob Devries
devries.bob at gmail.com
Mon Jan 2 08:59:19 EST 2006
Thanks, Robert. I, too realised that it was that sex that caught me, but
there was another error I overlo0oked as well.
I replaced this line:
while ((int)*s2 < 128) { /* line 8*/
with:
while (((int)*s2 & 0xFF) < 128) {
but I also needed to save a copy of the pointer to the start of the s1 char
array, since I modified it in the routine.
The resulting code is now:
char *
strhcpy(s1, s2)
char *s1;
char *s2;
{
char *temp;
temp = s1;
while (((int)*s2 & 0xFF) < 128) {
*s1++ = *s2++;
}
*s1++ = *s2++ & 0x7F;
*s1 = '\0';
return (temp);
}
which works as intended.
Thanks for the help.
--
Regards, Bob Devries, Dalby, Queensland, Australia
Isaiah 50:4 The sovereign Lord has given me
the capacity to be his spokesman,
so that I know how to help the weary.
website: http://www.home.gil.com.au/~bdevasl
my blog: http://bdevries.invigorated.org/
----- Original Message -----
From: "Robert Gault" <robert.gault at worldnet.att.net>
To: "CoCoList for Color Computer Enthusiasts" <coco at maltedmedia.com>
Sent: Monday, January 02, 2006 11:38 PM
Subject: Re: [Coco] help with C problem
> Assuming there is not a BUG, looks like the error is dependent on the
> software in use. This works with Microware C in OS-9. The crucial lines
> might be found if you can get the program saved as an .a file.
>
> _3 (int)*s2 < 128
> ldb [6,s]
> sex
> cmpd #128
> lblt _4
>
> If there is no equivalent to sex on your system or there is some other
> size mismatch, then maybe (int)*s2 will always be less than 128. Turns out
> that in OS-9 you get the exact same conversion with *s2<128,
> (char)*s2 < 128, or (short)*s2 <128.
>
> If the OS-9 package is not "outside the pale" for C usage, then most
> likely char *s2 or (int)*s2 does not result in what you are expecting.
>
> Bob Devries wrote:
>> To all you C gurus: I have a problem with compiling the following code:
>>
>> char *
>> strhcpy(s1, s2)
>> char *s1;
>> char *s2;
>> {
>> while ((int)*s2 < 128) { /* line 8*/
>> *s1++ = *s2++;
>> }
>> *s1++ = *s2++ & 0x7F;
>> *s1 = '\0';
>> return (s1);
>> }
>>
>> The compiler always gives a warning in line 8: [Warning] comparison is
>> always true due to limited range of data type
>>
>> Can someone PLEASE tell me what I'm doing wrong?
>> Yes, you're right, I'm trying to write a PC version of the OS9 library
>> function strhcpy().
>>
>> --
>> Regards, Bob Devries, Dalby, Queensland, Australia
>>
>> Isaiah 50:4 The sovereign Lord has given me
>> the capacity to be his spokesman,
>> so that I know how to help the weary.
>>
>> website: http://www.home.gil.com.au/~bdevasl
>> my blog: http://bdevries.invigorated.org/
>>
>>
>
> --
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
More information about the Coco
mailing list