]> git.plutz.net Git - x11sh/commitdiff
much faster connection setup
authorPaul Hänsch <paul@plutz.net>
Fri, 14 Apr 2023 11:55:59 +0000 (13:55 +0200)
committerPaul Hänsch <paul@plutz.net>
Fri, 14 Apr 2023 11:55:59 +0000 (13:55 +0200)
libx11.sh

index 773a92036f41317e2aeae5fc08087bf7fb5e7b7f..fb3ce55b819b2a6f1350ebbbf3f8d25249cc50d9 100755 (executable)
--- 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