#!/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
fi
}
-printe(){ printf "$@" >&2; }
+# Print Error
+# (even if DEBUG is disabled)
+printe(){ printf "$@" |debug >&2; }
case $DISPLAY in
:[0-9]*)
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"
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
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