From: Paul Hänsch Date: Fri, 14 Apr 2023 11:55:59 +0000 (+0200) Subject: much faster connection setup X-Git-Url: https://git.plutz.net/?a=commitdiff_plain;h=75f5f9521f2657815559ebb2f04426cd27fbbc77;p=x11sh much faster connection setup --- diff --git a/libx11.sh b/libx11.sh index 773a920..fb3ce55 100755 --- a/libx11.sh +++ b/libx11.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh _EXEC="${0}" X11_FORK="${X11_FORK:-0}" @@ -104,33 +104,27 @@ x11_additional_data(){ x11_read_values(){ local data chars m1 m2 m3 m4; - read data; - data="${data} " while [ $# -gt 0 ]; do case $1 in CARD8|BYTE) - m1="${data%% *}" data="${data#* }" + read m1 printf "%i " $m1; shift 1 ;; CARD16) - m1="${data%% *}" data="${data#* }" - m2="${data%% *}" data="${data#* }" + read m1; read m2; printf "%i " $((256 * m1 + m2)); shift 1 ;; CARD32|VALUE|TIMESTAMP) - m1="${data%% *}" data="${data#* }" - m2="${data%% *}" data="${data#* }" - m3="${data%% *}" data="${data#* }" - m4="${data%% *}" data="${data#* }" + read m1; read m2; read m3; read m4; printf "%i " $((16777216 * m1 + 65536 * m2 + 256 * m3 + m4)); shift 1 ;; STRING8) # Argument: Number of characters chars="${2:-0}" m1='' m2='' while [ $chars -gt 0 ]; do - m1="$m1 ${data%% *}" - data="${data#* }" + read m2; + m1="$m1 $m2" chars=$((chars - 1)) done printf "$(printf '\\%o' $m1)\n"; @@ -139,30 +133,28 @@ x11_read_values(){ pad) # Argument: Number of octets, discards octets without output chars="${2:-0}" while [ $chars -gt 0 ]; do - data="${data#* }" + read m1 chars=$((chars - 1)) done shift 2 ;; FORMAT) - m1="${data%% *}" data="${data#* }" - m2="${data%% *}" data="${data#* }" - m3="${data%% *}" data="${data#* }" - data="${data#* * * * * }" + read m1; read m2; read m3; + read m4; read m4; read m4; read m4; read m4; printf '%i %i %i\n' "$m1" "$m2" "$m3" shift 1 ;; DEPTH) - debug 'Data: %i\n' "${#data}" - [ ${#data} -lt 100 ] && debug 'Data: %s\n' "$data" - { read m1 m2 data; } <<-EOF - $(printf '%i ' $data |x11_read_values CARD8 pad 1 CARD16 pad 4) + { read m1 m2; } <<-EOF + $(x11_read_values CARD8 pad 1 CARD16 pad 4) EOF debug 'Depth: %i, VTypes: %i\n' $m1 $m2 + # x11_read_values pad $((m2 * 24)) + debug 'DEPTH VID Vclass RGBbits ClrMaps MaskR MaskG MaskB\n' while [ $m2 -gt 0 ]; do - { read m3; read data; } <<-EOF - $(printf '%i ' $data |x11_read_values CARD32 CARD8 CARD8 CARD16 CARD32 CARD32 CARD32 pad 4 -) + { 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 printf '%i %i %i %i %i %i %i %i\t' $m1 $m3 @@ -171,19 +163,18 @@ x11_read_values(){ shift 1 ;; SCREEN) - { read m1; read data; } <<-EOF - $(printf '%i ' $data |x11_read_values \ + { read m1; } <<-EOF + $(x11_read_values \ CARD32 CARD32 CARD32 CARD32 CARD32 CARD16 CARD16 \ - CARD16 CARD16 CARD16 CARD16 CARD32 CARD8 CARD8 CARD8 CARD8 - + 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 - # debug 'Depth / Visuals: %s\n' "$data" while [ $m2 -gt 0 ]; do - { read m3; read data; } <<-EOF - $(printf '%i ' $data |x11_read_values DEPTH -) + { read m3; } <<-EOF + $(x11_read_values DEPTH) EOF m1="$m1 $m3" m2=$((m2 - 1)) @@ -192,16 +183,18 @@ x11_read_values(){ shift 1 ;; -) - printf '\n' - shift 1 + m2='' + while read m1; do + m2="$m2 $m1" + done + printf '%i ' $m2 + shift $# ;; *) debug 'Unknown value type: %s\n' "$1" shift 1 ;; esac; done - - printf '%s\n' "$data" } x11_setup(){ @@ -218,12 +211,12 @@ x11_setup(){ case $m1 in 0): # Failed debug 'X11: Setup Failed\nProtocol Version: %s\n' "$X11_VERSION" - debug '%s\n' "$(printf '%i ' $data |x11_read_values STRING8 $m2)" + debug '%s\n' "$(printf '%i\n' $data |x11_read_values STRING8 $m2)" return 1 ;; 2): # Authenticate debug 'X11: Setup Authenticate\n' - debug '%s\n' "$(printf '%i ' $data |x11_read_values STRING8 $m2)" + debug '%s\n' "$(printf '%i\n' $data |x11_read_values STRING8 $m2)" return 2 ;; 1): # Success @@ -232,26 +225,26 @@ x11_setup(){ m2 m3 X11_IMAGE_BO X11_BITMAP_BO \ X11_SCANLINE_UNIT X11_SCANLINE_PAD \ X11_MIN_KEYCODE X11_MAX_KEYCODE \ - junk data; + data; } <<-EOF - $( printf '%i ' $data |x11_read_values \ + $( printf '%i\n' $data |x11_read_values \ CARD32 CARD32 CARD32 CARD32 \ CARD16 CARD16 \ CARD8 CARD8 CARD8 CARD8 \ CARD8 CARD8 \ CARD8 CARD8 \ - CARD32 + pad 4 - ) EOF { read X11_VENDOR; read data; } <<-EOF - $( printf '%i ' $data |x11_read_values STRING8 $m1 pad $(( (4 - m1 % 4) % 4 )) ) + $( 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 ' $data |x11_read_values FORMAT ) + $( printf '%i\n' $data |x11_read_values FORMAT - ) EOF X11_PIXMAP_FORMATS="${X11_PIXMAP_FORMATS}${m1}${BR}" m3=$((m3 - 1)) @@ -259,7 +252,7 @@ x11_setup(){ debug "Pixmap Formats:\nDepth BPP SL pad\n%s" "$X11_PIXMAP_FORMATS" while [ $m2 -gt 0 ]; do { read m1; read data; } <<-EOF - $(printf '%i ' $data |x11_read_values SCREEN) + $(printf '%i\n' $data |x11_read_values SCREEN -) EOF X11_SCREENS="${X11_SCREENS}${m1}${BR}" m2=$((m2 - 1)) @@ -269,4 +262,5 @@ x11_setup(){ } x11_setup +times # cat <&3