grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] fix last column in BIOS console


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: [PATCH] fix last column in BIOS console
Date: Mon, 08 Apr 2013 19:44:41 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130116 Icedove/10.0.12

On 08.04.2013 19:17, Vladimir 'φ-coder/phcoder' Serbinenko wrote:

> On 21.02.2013 17:20, Andrey Borzenkov wrote:
> 
>> BIOS console wrapped line at 79 characters. It became the issue
>> after recent changes when extra column for scrolling indications was
>> removed. The effect was that up/down arrows were printed in the first
>> column of the next line.
>>
>> May be it would be easier to simply use INT10 AH=13. Available
>> documentation indicates that it is available since 1986, so I guess
>> any system that exists today should implement it.
>>
> 
> I need to look how we ended up with the current code. It doesn't match
> its comment which details an algorithm working for any screen dimensions
> while current code assumes a fixed width. Another corner question is a
> possibility of usage of vga_text and keep console to the bare minimum.
> Does anyone have information about BIOSes redirecting their output?
> The age of the function is no argument about their availability. Loads
> of functions are not implemented or broken in modern BIOSes. More or
> less the only guarantee of function working on all BIOSes is if BIOS
> uses them in a normal bootpath.
> 

The code was the same since it was (re)written in 2002 for GRUB Legacy.
Your code and original make the same assumptions, so the patch is good.
Could you make a membership request on savannah so you can commit
patches yourself once they're approved?

>> Signed-off-by: Andrey Borzenkov <address@hidden>
>>
>> ---
>>  grub-core/term/i386/pc/console.c |   21 ++++++++-------------
>>  1 file changed, 8 insertions(+), 13 deletions(-)
>>
>> diff --git a/grub-core/term/i386/pc/console.c 
>> b/grub-core/term/i386/pc/console.c
>> index 2aa1943..358611a 100644
>> --- a/grub-core/term/i386/pc/console.c
>> +++ b/grub-core/term/i386/pc/console.c
>> @@ -86,13 +86,9 @@ grub_console_gotoxy (struct grub_term_output *term 
>> __attribute__ ((unused)),
>>   * Put the character C on the console. Because GRUB wants to write a
>>   * character with an attribute, this implementation is a bit tricky.
>>   * If C is a control character (CR, LF, BEL, BS), use INT 10, AH = 0Eh
>> - * (TELETYPE OUTPUT). Otherwise, save the original position, put a space,
>> - * save the current position, restore the original position, write the
>> - * character and the attribute, and restore the current position.
>> - *
>> - * The reason why this is so complicated is that there is no easy way to
>> - * get the height of the screen, and the TELETYPE OUTPUT BIOS call doesn't
>> - * support setting a background attribute.
>> + * (TELETYPE OUTPUT). Otherwise, use INT 10, AH = 9 to write character
>> + * with attributes and advance cursor. If we are on the last column,
>> + * let BIOS to wrap line correctly.
>>   */
>>  static void
>>  grub_console_putchar_real (grub_uint8_t c)
>> @@ -112,19 +108,18 @@ grub_console_putchar_real (grub_uint8_t c)
>>    /* get the current position */
>>    pos = grub_console_getxy (NULL);
>>    
>> +  /* write the character with the attribute */
>> +  int10_9 (c, 1);
>> +
>>    /* check the column with the width */
>>    if ((pos & 0xff00) >= (79 << 8))
>>      {
>>        grub_console_putchar_real (0x0d);
>>        grub_console_putchar_real (0x0a);
>> -      /* get the current position */
>> -      pos = grub_console_getxy (NULL);
>>      }
>> +  else
>> +    grub_console_gotoxy (NULL, ((pos & 0xff00) >> 8) + 1, (pos & 0xff));
>>  
>> -  /* write the character with the attribute */
>> -  int10_9 (c, 1);
>> -
>> -  grub_console_gotoxy (NULL, ((pos & 0xff00) >> 8) + 1, (pos & 0xff));
>>  }
>>  
>>  static void
> 
> 
> 



Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]