- repnz movsb turns out to not actually be a legal instruction,
resulting in various strings being copied incorrectly, leading to
random crashes in various places. Rework to use loop instead.
Thanks to Alex Smith for helping review changes and offering
improvements.
- Minor cleanups.
- Fixes#8650 properly.
- Replace arch_cpu_user_strlcpy() and arch_cpu_user_memset() with x86 assembly
versions. These correctly handle the fault handler, which had broken again
on gcc4 for the C versions, causing stack corruption in certain error cases.
The other architectures will still need to have corresponding asm variants
added in order for them to not run into the same issue though.
The caches contain pointers into memory allocated by debug_malloc()
that come from a pool that is destroied once the command returns.
We therefore have to ensure that all such pointers are cleared in all
cases before returning from the command or we will run into errors
when executing the next commands.
Using the qrwebpost debugger command one can initialize an id for
subsequent QR codes. All QR codes generated following such an
invokation produce URL QR codes that link to an online service that
concatenates all data with the same id and later allows it to be
displayed/downloaded in one piece. This makes collecting larger amounts
of data more convenient. Note though that the URL encoding does waste
space and therefore reduces data density, causing more QR codes to be
generated for the same amount of input data.
* Generates QR codes using the qrencode library functions and prints them
using terminal escape sequences and the special "block" characters.
* Supplies a static QR buffer that can be used to accumulate output for
later conversion into QR codes.
* Adds qrencode debugger command that allows to generate QR codes for
arbitrary strings.
* Adds qrappend, qrflush and qrclear to manipulate the QR buffer.
qrappend can be the target of a pipe to accumulate output from other
commands. qrflush causes the QR buffer to be encoded and cleared and
qrclear only clears the QR buffer.
* Adds qrconfig that allows changing the QR code version, determining
what size QR codes are to be used.
Characters 17, 18 and 19 (device control 1, 2 and 3) become "full block",
"upper filled block" and "lower filled block". Using back- and foreground
color inversion these could be reduced to a single "half block", but
having them available as idividual chars is more convenient.
The kernel strdup will still be used, as the local symbol doesn't
override that. Since we must not use strdup from within the kernel
debugger (as it does malloc from the normal heap), force the use of
the internal strdup that gets redirected to debug_malloc.
* Remove several hard-coded colors
* Reduce slightly the font size in the file info panel (#6909).
* Don't hardcode the font height, compute it
* Fix a bug where deploying the bottom panel makes the current
window width the new minimum width
* Don't hardcode the bottom panel's height, compute it
(allows better font size tolerance).
Introduce a function to generate the string representation of a bitrate
(kbps, mbps, gbps, etc..)
* Factor out the code from MediaPlayer InfoWindow
* Allow different bases (/1000 or /1024)
Based on printf debugging the correct left value is actually -1, not 0, but
instead of hard-coding numbers it makes more sense to use the existing value.
I'm not sure if a -1 left value makes much sense, but overall this seems to
work and does not have the scrolling artifacts.
But overall I think ShowImage needs more layout management. Doing all this
moving and resizing manually is error prone.
Fixes#8648.
* Extract the scrollbar change based on the mouse wheel delta into a protected
method of BView.
* Call that method from BScrollBar's MessageReceived.
With this change it is now a bit easier to scroll horizontally around the
system by putting the mouse cursor over a horizontal scrollbar and using the
wheel.
Fixes#8631.
After coming back from fullscreen mode, horizontally scrolling a zoomed
image would draw vertical lines from the right border. Seems like an
off-by-one issue. This fixes it in my tests... hope it's properly done.