This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Program issue when compiled against Newlib


You are on to something with '\r'. Maybe my implementation of read()
is off. I now get better results as seen here:
----------------
Please type your name: Ian
Please type another word: Test
Hello Ian

Word was Test

Goodbye.
----------------

The data from the second string is now printed. I just get some extra
newline characters now.

// read - Read from a file
int read(int file, char *ptr, int len)
{
	asm volatile ("xchg %bx, %bx"); // Bochs magic debug
	if (file == 0) // STDIN
	{
		asm volatile ("call *0x00100078" : "=c" (len) : "c"(len), "D"(ptr));
// Automatically NULL terminates input from the keyboard
		ptr[len] = '\r';
		ptr[len+1] = '\n'; // NULL terminate as well?
		len += 2;
		asm volatile ("call *0x00100048"); // Print a newline
	}
	else
	{
		len = 0;
	}
	return len;
}

I am debugging the OS and program under Bochs.

Thanks,
-Ian


On Fri, Aug 12, 2011 at 10:50 AM, Eric Norum <eric@norum.ca> wrote:
> The serial I/O driver on your BareMetal OS isn't converting the '\r' that you used to terminate the input string into a "\r\n" when echoing -- on an old-fashioned paper terminal you'd see the two lines printed on top of each other.
>
> On Aug 12, 2011, at 7:26 AM, Ian Seyler wrote:
>
>> I have compiled NewLib for use in BareMetal OS but there seems to be
>> an issue during program execution.
>>
>> Example Code:
>> #include <stdio.h>
>> #include <stdlib.h>
>>
>> char userinput1[160];
>> char userinput2[160];
>>
>> int main()
>> {
>> ? ? ? printf("Please type your name: ");
>> ? ? ? fgets(userinput1, 100, stdin);
>> ? ? ? printf("Please type another word: ");
>> ? ? ? fgets(userinput2, 100, stdin);
>> ? ? ? printf("Hello %s", userinput1);
>> ? ? ? printf("Word was %s", userinput2);
>> ? ? ? printf("Goodbye.\n");
>>
>> ? ? ? return 0;
>> }
>>
>> Program compiled with the regular C library and run under Ubuntu:
>> Please type your name: Ian
>> Please type another word: Test
>> Hello Ian
>> Word was Test
>> Goodbye.
>>
>> Program compiled against Newlib and run under BareMetal OS:
>> Please type your name: Ian
>> Please type another word: Test
>> Hello Ian
>> Word was Goodbye.
>>
>> With debugging enabled under BareMetal OS I can see that both strings
>> are populated with the data that was entered. However the last string
>> displayed on the screen is "Word was Goodbye." in one call to the OS.
>> Does anyone have a hint on this? Seems like an issue with printf().
>> Does GCC optimize it somehow?
>>
>> Best regards,
>> Ian
>>
>>
>> --
>> Ian Seyler | Founder / Lead Programmer | Return Infinity |
>> ian.seyler@returninfinity.com | visit us at www.returninfinity.com
>
> --
> Eric Norum
> eric@norum.ca
>
>
>
>
>



-- 
Ian Seyler | Founder / Lead Programmer | Return Infinity |
ian.seyler@returninfinity.com | visit us at www.returninfinity.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]