]> git.plutz.net Git - x11sh/commitdiff
x11_send for sending binary values and strings
authorPaul Hänsch <paul@plutz.net>
Fri, 28 Apr 2023 21:58:31 +0000 (23:58 +0200)
committerPaul Hänsch <paul@plutz.net>
Fri, 28 Apr 2023 21:58:31 +0000 (23:58 +0200)
libx11.sh

index fb3ce55b819b2a6f1350ebbbf3f8d25249cc50d9..283cbaf37be4553c077a7b4dc5d3436453ceb5b9 100755 (executable)
--- 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