From: Paul Hänsch Date: Fri, 28 Apr 2023 21:58:31 +0000 (+0200) Subject: x11_send for sending binary values and strings X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=cdc8f839299a71156860bec90eedd910c87212bc;p=x11sh x11_send for sending binary values and strings --- diff --git a/libx11.sh b/libx11.sh index fb3ce55..283cbaf 100755 --- a/libx11.sh +++ b/libx11.sh @@ -1,10 +1,14 @@ #!/bin/sh +#!/opt/busybox/ash _EXEC="${0}" X11_FORK="${X11_FORK:-0}" +CR="$(printf \\r)" +TAB=' ' BR=' ' + debug(){ DEBUG="${DEBUG:-/dev/stderr}" if [ $# -gt 0 ]; then @@ -14,7 +18,9 @@ debug(){ fi } -printe(){ printf "$@" >&2; } +# Print Error +# (even if DEBUG is disabled) +printe(){ printf "$@" |debug >&2; } case $DISPLAY in :[0-9]*) @@ -145,38 +151,38 @@ x11_read_values(){ shift 1 ;; DEPTH) - { read m1 m2; } <<-EOF + read m1 m2 <<-EOF $(x11_read_values CARD8 pad 1 CARD16 pad 4) EOF - debug 'Depth: %i, VTypes: %i\n' $m1 $m2 + # debug 'Depth: %i, VTypes: %i\n' $m1 $m2 # x11_read_values pad $((m2 * 24)) - debug 'DEPTH VID Vclass RGBbits ClrMaps MaskR MaskG MaskB\n' + # debug 'DEPTH VID Vclass RGBbits ClrMaps MaskR MaskG MaskB\n' while [ $m2 -gt 0 ]; do - { read m3; } <<-EOF + read m3 <<-EOF $(x11_read_values CARD32 CARD8 CARD8 CARD16 CARD32 CARD32 CARD32 pad 4) EOF - debug '%i %i %i %i %i %i %i %i\n' $m1 $m3 + # debug '%i %i %i %i %i %i %i %i\n' $m1 $m3 printf '%i %i %i %i %i %i %i %i\t' $m1 $m3 m2=$((m2 - 1)) done shift 1 ;; SCREEN) - { read m1; } <<-EOF + read m1 <<-EOF $(x11_read_values \ CARD32 CARD32 CARD32 CARD32 CARD32 CARD16 CARD16 \ CARD16 CARD16 CARD16 CARD16 CARD32 CARD8 CARD8 CARD8 CARD8 ) EOF m2="${m1##* }" - #m1="${m1% *}" - debug 'Root: %i\nColormap: %i\nWhite: %i\nBlack: %i\nInput Mask: %i\nWidth: %i\nHeight: %i\nMMWidth: %i\nMMHeight: %i\nMaps min: %i\nMaps max: %i\nVisual: %i\nBacking-Stores: %i\nSave-Unders: %i\nRoot-depth: %i\nN Depth: %i\n' $m1 + m1="${m1% *}" + # debug 'Root: %i\nColormap: %i\nWhite: %i\nBlack: %i\nInput Mask: %i\nWidth: %i\nHeight: %i\nMMWidth: %i\nMMHeight: %i\nMaps min: %i\nMaps max: %i\nVisual: %i\nBacking-Stores: %i\nSave-Unders: %i\nRoot-depth: %i\n' $m1 while [ $m2 -gt 0 ]; do - { read m3; } <<-EOF + read m3 <<-EOF $(x11_read_values DEPTH) EOF - m1="$m1 $m3" + m1="$m1 $m3" m2=$((m2 - 1)) done printf '%s\n' "$m1" @@ -197,10 +203,103 @@ x11_read_values(){ esac; done } -x11_setup(){ +x11_read_server(){ + local data="$1" + + read X11_RELEASE X11_RID_BASE X11_RID_MASK X11_MBUF_SIZE \ + m1 X11_MAX_RQ_LENGTH \ + m2 m3 X11_IMAGE_BO X11_BITMAP_BO \ + X11_SCANLINE_UNIT X11_SCANLINE_PAD \ + X11_MIN_KEYCODE X11_MAX_KEYCODE \ + data <<-EOF + $( printf '%i\n' $data |x11_read_values \ + CARD32 CARD32 CARD32 CARD32 \ + CARD16 CARD16 \ + CARD8 CARD8 CARD8 CARD8 \ + CARD8 CARD8 \ + CARD8 CARD8 \ + pad 4 - + ) + EOF + X11_SCREENS="$m2" + # debug 'Screens: %i\n' $m2 + + { read X11_VENDOR; read data; } <<-EOF + $( printf '%i\n' $data |x11_read_values STRING8 $m1 pad $(( (4 - m1 % 4) % 4 )) - ) + EOF + # debug "Vendor (%i): %s\n" "$m1" "$X11_VENDOR" + + X11_PIXMAP_FORMATS="$( + printf '%i\n' $data |while [ $m3 -gt 0 ]; do + x11_read_values CARD8 CARD8 CARD8 pad 5 + printf \\n + m3=$((m3 - 1)) + done + )" + read data <<-EOF + $( printf '%i\n' $data |x11_read_values pad $((m3 * 8)) - ) + EOF + # debug 'Pixmap Formats:\nDepth BPP SL pad\n' + # debug '%i %i %i\n' $X11_PIXMAP_FORMATS + + while [ $m2 -gt 0 ]; do + { read m1; read data; } <<-EOF + $(printf '%i\n' $data |x11_read_values SCREEN -) + EOF + X11_SCREENS="${X11_SCREENS}${m1}${BR}" + m2=$((m2 - 1)) + done +} + +x11_send(){ + local msg='' send='' v n; + + for v in "$@"; do case $v in + b-*) + n=$(( ${v#?} + 256 )) + send="${send} ${n}" + ;; + b*) + n=${v#?} + send="${send} ${n}" + ;; + h-*) + n=$(( ${v#?} + 65536 )) + send="${send} $((n / 256)) $((n % 256))" + ;; + h*) + n=${v#?} + send="${send} $((n / 256)) $((n % 256))" + ;; + w-*) + n=$(( ${v#?} + 4294967296 )) + send="${send} $(( n / 16777216 )) $(( n % 16777216 / 65536 )) $(( n % 65536 / 256 )) $(( n % 256 ))" + ;; + w*) + n=${v#?} + send="${send} $(( n / 16777216 )) $(( n % 16777216 / 65536 )) $(( n % 65536 / 256 )) $(( n % 256 ))" + ;; + *) + n='' v="${v#:}" + while [ "$v" ]; do case $v in + \\*) n="${n}\\\\"; v="${v#\\}" ;; + %*) n="${n}\\%"; v="${v#%}" ;; + *) n="${n}${v%%[\\%]*}"; v="${v#"${v%%[\\%]*}"}" ;; + esac; done + msg="${msg}$([ "$send" ] && printf '\\%o' $send)${n}" + send='' + ;; + esac; done + + msg="${msg}$([ "$send" ] && printf '\\%o' $send)" + printf "$msg" >&4 +} + +x11_Setup(){ local m1 m2 m3 m4 m5 m6 m7 m8 data - printf 'B~\000\013\000\000\000\000\000\000~~' >&4 + x11_send b66 , h11 h0 h0 h0 ,, + # printf 'B~\000\013\000\000\000\000\000\000~~' >&4 read m1 m2 m3 m4 <&3 read m5 m6 m7 m8 <&3 @@ -220,47 +319,70 @@ x11_setup(){ return 2 ;; 1): # Success - { read X11_RELEASE X11_RID_BASE X11_RID_MASK X11_MBUF_SIZE \ - m1 X11_MAX_RQ_LENGTH \ - m2 m3 X11_IMAGE_BO X11_BITMAP_BO \ - X11_SCANLINE_UNIT X11_SCANLINE_PAD \ - X11_MIN_KEYCODE X11_MAX_KEYCODE \ - data; - } <<-EOF - $( printf '%i\n' $data |x11_read_values \ - CARD32 CARD32 CARD32 CARD32 \ - CARD16 CARD16 \ - CARD8 CARD8 CARD8 CARD8 \ - CARD8 CARD8 \ - CARD8 CARD8 \ - pad 4 - - ) - EOF - - { read X11_VENDOR; read data; } <<-EOF - $( printf '%i\n' $data |x11_read_values STRING8 $m1 pad $(( (4 - m1 % 4) % 4 )) - ) - EOF - debug "Vendor (%i): %s\n" "$m1" "$X11_VENDOR" - - while [ $m3 -gt 0 ]; do - { read m1; read data; } <<-EOF - $( printf '%i\n' $data |x11_read_values FORMAT - ) - EOF - X11_PIXMAP_FORMATS="${X11_PIXMAP_FORMATS}${m1}${BR}" - m3=$((m3 - 1)) - done - debug "Pixmap Formats:\nDepth BPP SL pad\n%s" "$X11_PIXMAP_FORMATS" - while [ $m2 -gt 0 ]; do - { read m1; read data; } <<-EOF - $(printf '%i\n' $data |x11_read_values SCREEN -) - EOF - X11_SCREENS="${X11_SCREENS}${m1}${BR}" - m2=$((m2 - 1)) - done + x11_read_server "$data" + return 0 ;; esac } -x11_setup +x11_print_screen(){ + local screen visuals n="${1:-1}"; + screen="${X11_SCREENS}" + + while [ $n -gt 1 ]; do + screen="${screen#*${BR}}" + n=$((n - 1)) + done + + screen="${screen%%${BR}*}" + visuals="${screen#*${TAB}}" + screen="${screen%%${TAB}*}" + debug 'Root: %i\nColormap: %i\nWhite: %i\nBlack: %i\nInput Mask: %i\nWidth: %i\nHeight: %i\nMMWidth: %i\nMMHeight: %i\nMaps min: %i\nMaps max: %i\nVisual: %i\nBacking-Stores: %i\nSave-Unders: %i\nRoot-depth: %i\n' $screen + debug 'DEPTH VID Vclass RGBbits ClrMaps MaskR MaskG MaskB\n' + debug '%i %i %i %i %i %i %i %i\n' $visuals +} + +x11_set_screen(){ + local screen visuals n="${1:-1}"; + screen="${X11_SCREENS}" + + [ $n -gt $X11_SCREENS ] && return 1 + + while [ $n -gt 1 ]; do + screen="${screen#*${BR}}" + n=$((n - 1)) + done + + screen="${screen%%${BR}*}" + visuals="${screen#*${TAB}}" + screen="${screen%%${TAB}*}" + debug ' +Root: %i +Colormap: %i +White: %i +Black: %i +Input Mask: %i +Width: %i +Height: %i +MMWidth: %i +MMHeight: %i +Maps min: %i +Maps max: %i +Visual: %i +Backing-Stores: %i +Save-Unders: %i +Root-depth: %i\n' $screen + + debug 'DEPTH VID Vclass RGBbits ClrMaps MaskR MaskG MaskB\n' + debug '%i %i %i %i %i %i %i %i\n' $visuals +} + +x11_CreateWindow(){ +: +} + +x11_Setup +x11_print_screen 1 + times # cat <&3