Ahhh.. yes I see it know, how could I ever miss :)
Well, the testapp works same here, both in my host and
target.
The hexdump is also same:
00000000 36 35 34 33 32 31 08 08 08 08 0a |654321.....|
0000000b
Busybox though behaves different. Extremely odd.
It seems then as some offset errors in busybox datasegment
for some reasons, since I get some text out from a completely
different string.
Denis Vlasenko wrote:
> On Monday 06 August 2007 10:35, Per Hallsmark wrote:
>> well... sometimes one can answer oneself... :)
>>
>> --- busybox-1.6.1.orig/libbb/lineedit.c 2007-06-30 17:06:40.000000000 +0200
>> +++ busybox-1.6.1/libbb/lineedit.c 2007-08-06 11:23:57.000000000 +0200
>> @@ -165,10 +165,12 @@
>>
>> if (cmdedit_x >= num) {
>> cmdedit_x -= num;
>> +#if 0
>> if (num <= 4) {
>> printf("\b\b\b\b" + (4-num));
>> return;
>> }
>> +#endif
>> printf("\033[%uD", num);
>> return;
>> }
>>
>>
>> With above patch backspace works ok.
>>
>> The \b\b... printf looks rather mystic... guess the author
>> perhaps wanted something like this instead?
>>
>> switch (num) {
>> case 4:
>> printf("\b");
>> /* fall trough */
>> case 3:
>> printf("\b");
>> /* fall trough */
>> case 2:
>> printf("\b");
>> /* fall trough */
>> case 1:
>> printf("\b");
>> return;
>> default:
>> }
>>
>> but I wonder what the benefits are...
>
> printf("\b\b\b\b" + (4-num));
>
> does exactly the same in 4 times less code.
> If num==4, it does printf("\b\b\b\b" + 0) => printf("\b\b\b\b")
> If num==3, it does printf("\b\b\b\b" + 1) => printf("\b\b\b")
> If num==2, it does printf("\b\b\b\b" + 2) => printf("\b\b")
> If num==1, it does printf("\b\b\b\b" + 3) => printf("\b")
> etc
>
> The benefits are that we send less bytes than with printf("\033[%uD", num);
> It's done primarily for the most common case: single [Backspace] key.
> It's silly to send ESC [ 1 D instead of single backspace char.
>
> Now, I wonder why \b for you does not do what it should (that is,
> going back one char). Can you compile and run this test program?
>
> int main(int argc, char **argv) {
> printf("987654321\b\b\b\b" + argc);
> fflush(0);
> sleep(3);
> puts("");
> }
>
> When I run it, I see this:
>
> # ./a.out
> 87654321 <---- cursor is under '4'
> # ./a.out 1
> 7654321 <---- cursor is under '4'
> # ./a.out 1 1
> 654321 <---- cursor is under '4'
> # ./a.out 1 1 | hexdump -vC
> 00000000 36 35 34 33 32 31 08 08 08 08 0a |654321.....|
> 0000000b
>
> IOW, both printf("str" + n) and '\b' work right for me.
>
> What do you see
> --
> vda
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox