This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
user:bewanyk:portfolio:autodraw [2011/05/20 03:15] – bewanyk | user:bewanyk:portfolio:autodraw [2011/05/20 18:34] (current) – bewanyk | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ======Auto Draw with XPaint!====== | ||
+ | =====Requirements===== | ||
+ | Begin with a PC or terminal with a unix/linux operating system, xpaint, xwit, and xte packets installed. | ||
+ | |||
+ | Open a terminal session and begin by reading and experimenting with xte and xwit commands. | ||
+ | |||
+ | =====Beginning===== | ||
+ | Use the xwit commands to move the mouse and issue mouse click commands. | ||
+ | |||
+ | Begin with mouse movement using xwit. The location of the mouse destination is read from a 0, 0 origin located at the top left corner of the screen. | ||
+ | < | ||
+ | |||
+ | Performing mouse clicks is easily accomplished using xte commands. | ||
+ | < | ||
+ | |||
+ | To click and hold, as if for a click and drag function use the mousedown # command to press the button and teh mouseup # command to release it. | ||
+ | < | ||
+ | :~$xte ' | ||
+ | :~$xte ' | ||
+ | |||
+ | Using and investigation and the man pages fro xwit and xte eventually you can develop a script to move the mouse around the screen and perform actions without touching the computer itself. | ||
+ | |||
+ | < | ||
+ | echo "Move mouse pointer to top left corner (0, | ||
+ | xwit -warp 0 0 -root | ||
+ | echo -n "Pause 5 seconds." | ||
+ | xte 'sleep 5' | ||
+ | echo "Move mouse pointer to bottom right corner (1280, | ||
+ | xwit -warp 1280 1024 -root | ||
+ | echo "pause 3 seconds..." | ||
+ | xte 'sleep 3' | ||
+ | echo "Move mouse pointer to middle of screen (640, 512)..." | ||
+ | xwit -warp 640 512 -root | ||
+ | xte ' | ||
+ | echo "open a lab46 window." | ||
+ | xte ' | ||
+ | xte 'key Down' | ||
+ | xte 'key Return' | ||
+ | </ | ||
+ | |||
+ | =====Progression===== | ||
+ | Once you have experience to this point, now you can use wininfo to make the script more dynamic. | ||
+ | |||
+ | The wininfo command will display information on the display you're using. | ||
+ | < | ||
+ | yTot=`xwininfo -root|grep Height|sed ' | ||
+ | |||
+ | These derived numbers can then be utilized with the xwit -resize option to gage the size of windows on the display. | ||
+ | |||
+ | Using these commands and normal commmand execution you can soon begin to draw things in X-Paint. | ||
+ | use xwit -warp commands to find buttons on the canvas and pallet for xpaint. | ||
+ | |||
+ | There can be squares inside squares with a script like this: | ||
+ | < | ||
+ | winID="" | ||
+ | let lat=hei=0 | ||
+ | xwit -warp 0 0 -root | ||
+ | tot=`xwit -all -print|grep Untitled|wc -l` | ||
+ | if [ tot > 0 ]; then | ||
+ | count=1 | ||
+ | for ((count; count <= tot; count++)); do | ||
+ | winID=`xwit -all -print|grep ' | ||
+ | if [ -z $winID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $winID -name Rnd$count | ||
+ | winID="" | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | xTot=`xwininfo -root|grep Width|sed ' | ||
+ | yTot=`xwininfo -root|grep Height|sed ' | ||
+ | #echo $xTot | ||
+ | #echo $yTot | ||
+ | xpaint -nowarn & | ||
+ | xte 'sleep 5' | ||
+ | palt=`xwit -all -print|grep XPaint|sed ' | ||
+ | xwit -id $palt -move 0 0 | ||
+ | let latP=`xwit -id $palt -print|sed ' | ||
+ | let canX=$xTot-$latP | ||
+ | let canY=$yTot | ||
+ | menuP=" | ||
+ | menuDwnP=" | ||
+ | OrigP=" | ||
+ | btnDwnP=" | ||
+ | btnUpP=" | ||
+ | btnRtP=" | ||
+ | btnLtP=" | ||
+ | $menuP | ||
+ | xte ' | ||
+ | $menuDwnP | ||
+ | $menuDwnP | ||
+ | xte ' | ||
+ | xte 'sleep 2' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canX" | ||
+ | xte 'key Tab' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canY" | ||
+ | xte 'sleep 3' | ||
+ | xte 'key Return' | ||
+ | xte 'key Return' | ||
+ | xte 'sleep 3' | ||
+ | canID=`xwit -all -print|grep ' | ||
+ | #echo $canID | ||
+ | if [ -z $canID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $canID -name Pic | ||
+ | fi | ||
+ | let latC=`xwit -id $canID -print|sed ' | ||
+ | let heiC=`xwit -id $canID -print|sed ' | ||
+ | xwit -id $canID -move $latP 0 | ||
+ | editB=" | ||
+ | origN=" | ||
+ | $OrigP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnRtP | ||
+ | xte ' | ||
+ | $origN | ||
+ | xwit -rwarp 200 -200 -root | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xwit -warp 265 56 -root | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | $origN | ||
+ | xwit -rwarp 250 -250 -root | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | echo " | ||
+ | |||
+ | Eventually with work it will progress till you can create multiple constructions. Squares, Circles, Fill actions and more! | ||
+ | < | ||
+ | winID="" | ||
+ | let lat=hei=0 | ||
+ | xwit -warp 0 0 -root | ||
+ | tot=`xwit -all -print|grep Untitled|wc -l` | ||
+ | if [ tot > 0 ]; then | ||
+ | count=1 | ||
+ | for ((count; count <= tot; count++)); do | ||
+ | winID=`xwit -all -print|grep ' | ||
+ | if [ -z $winID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $winID -name Rnd$count | ||
+ | winID="" | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | xTot=`xwininfo -root|grep Width|sed ' | ||
+ | yTot=`xwininfo -root|grep Height|sed ' | ||
+ | #echo $xTot | ||
+ | #echo $yTot | ||
+ | xpaint -nowarn & | ||
+ | xte 'sleep 5' | ||
+ | palt=`xwit -all -print|grep XPaint|sed ' | ||
+ | xwit -id $palt -move 0 0 | ||
+ | let latP=`xwit -id $palt -print|sed ' | ||
+ | let canX=$xTot-$latP | ||
+ | let canY=$yTot | ||
+ | menuP=" | ||
+ | menuDwn=" | ||
+ | origP=" | ||
+ | btnDwnP=" | ||
+ | btnUpP=" | ||
+ | btnRtP=" | ||
+ | btnLtP=" | ||
+ | $menuP | ||
+ | xte ' | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | xte ' | ||
+ | xte 'sleep 2' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canX" | ||
+ | xte 'key Tab' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canY" | ||
+ | xte 'sleep 3' | ||
+ | xte 'key Return' | ||
+ | xte 'key Return' | ||
+ | xte 'sleep 3' | ||
+ | canID=`xwit -all -print|grep ' | ||
+ | #echo $canID | ||
+ | if [ -z $canID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $canID -name Pic | ||
+ | fi | ||
+ | let latC=`xwit -id $canID -print|sed ' | ||
+ | let heiC=`xwit -id $canID -print|sed ' | ||
+ | xwit -id $canID -move $latP 0 | ||
+ | editB=" | ||
+ | origN=" | ||
+ | #get filled square | ||
+ | $origP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnRtP | ||
+ | xte ' | ||
+ | $origN | ||
+ | xwit -rwarp 200 -200 -root | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xwit -warp 265 56 -root | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | $origN | ||
+ | xwit -rwarp 250 -250 -root | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte 'sleep 20' | ||
+ | #clear canvas | ||
+ | $editB | ||
+ | xte ' | ||
+ | for ((count=0; count< | ||
+ | $menuDwn | ||
+ | done | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | let xCntr=$xTot/ | ||
+ | let yCntr=$yTot/ | ||
+ | xwit -warp 232 60 -root | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | #get empty circle | ||
+ | $origP | ||
+ | xte 'sleep 1' | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | xte 'sleep 1' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | xwit -warp $(($xCntr-250)) $(($yCntr+250)) -root | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | $origP | ||
+ | for ((count=0; count<9; count++)); do | ||
+ | $btnDwnP | ||
+ | done | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | #set green | ||
+ | xwit -warp 352 58 -root | ||
+ | xte ' | ||
+ | xwit -warp $xCntr $yCntr -root | ||
+ | xte ' | ||
+ | |||
+ | =====The final Step===== | ||
+ | With work and experimentation, | ||
+ | |||
+ | < | ||
+ | winID="" | ||
+ | let lat=hei=0 | ||
+ | xwit -warp 0 0 -root | ||
+ | tot=`xwit -all -print|grep Untitled|wc -l` | ||
+ | if [ $tot > 0 ]; then | ||
+ | count=1 | ||
+ | for ((count; count <= tot; count++)); do | ||
+ | winID=`xwit -all -print|grep ' | ||
+ | if [ -z $winID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $winID -name Rnd$count | ||
+ | winID="" | ||
+ | fi | ||
+ | done | ||
+ | fi | ||
+ | xTot=`xwininfo -root|grep Width|sed ' | ||
+ | yTot=`xwininfo -root|grep Height|sed ' | ||
+ | let xCntr=$xTot/ | ||
+ | let yCntr=$yTot/ | ||
+ | xpaint -nowarn & | ||
+ | xte 'sleep 7' | ||
+ | menuP=" | ||
+ | menuDwn=" | ||
+ | origP=" | ||
+ | btnDwnP=" | ||
+ | btnUpP=" | ||
+ | btnRtP=" | ||
+ | btnLtP=" | ||
+ | palt=`xwit -print -all|grep XPaint|sed ' | ||
+ | xwit -id $palt -move 0 0 | ||
+ | let latP=`xwit -print -id $palt|sed ' | ||
+ | let canX=$xTot-$latP | ||
+ | let canY=$yTot | ||
+ | #open canvas to screen - pallette. | ||
+ | $menuP | ||
+ | xte ' | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canX" | ||
+ | xte 'key Tab' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte 'key BackSpace' | ||
+ | xte "str $canY" | ||
+ | xte 'sleep 3' | ||
+ | xte 'key Return' | ||
+ | xte 'key Return' | ||
+ | xte 'sleep 3' | ||
+ | canID=`xwit -all -print|grep ' | ||
+ | if [ -z $canID ]; then | ||
+ | echo -n | ||
+ | else | ||
+ | xwit -id $canID -name Scene | ||
+ | fi | ||
+ | let latC=`xwit -print -id $canID|sed ' | ||
+ | let heiC=`xwit -print -id $canID|sed ' | ||
+ | xwit -id $canID -move $(($latP+3)) 0 | ||
+ | editB=" | ||
+ | origN=" | ||
+ | lineB=" | ||
+ | red=" | ||
+ | black=" | ||
+ | green=" | ||
+ | blue=" | ||
+ | ltBlu=" | ||
+ | yellow=" | ||
+ | white=" | ||
+ | orange=" | ||
+ | grey=" | ||
+ | line=" | ||
+ | if [ $canX > $canY ]; then | ||
+ | let SEG=$canY/ | ||
+ | else let SEG=$canX/ | ||
+ | fi | ||
+ | $black | ||
+ | xte ' | ||
+ | $origP | ||
+ | for ((count=0; count < 7; count++)); do | ||
+ | $btnDwnP | ||
+ | done | ||
+ | xte ' | ||
+ | $line | ||
+ | xte ' | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | xte ' | ||
+ | $black | ||
+ | xte ' | ||
+ | $origN | ||
+ | xwit -rwarp 20 -20 -root | ||
+ | xwit -rwarp $(($SEG*9)) 0 -root | ||
+ | #outside frame. | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | $origP | ||
+ | $btnDwnP | ||
+ | $btnDwnP | ||
+ | $btnRtP | ||
+ | xte ' | ||
+ | $origN | ||
+ | xwit -rwarp 20 -20 -root | ||
+ | xwit -rwarp $(($SEG*9)) 0 -root | ||
+ | #outer front edge | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte 'sleep 2' | ||
+ | xte ' | ||
+ | xte 'sleep 2' | ||
+ | xte " | ||
+ | xte 'sleep 2' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | #individual cubes. | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | #change color to begin fill | ||
+ | $green | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | #set fill tool. | ||
+ | $origP | ||
+ | for ((count=0; count<9; count++)); do | ||
+ | $btnDwnP | ||
+ | done | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | #fill blocks. | ||
+ | $origN | ||
+ | xwit -rwarp 20 20 -root | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $red | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $origN | ||
+ | xwit -rwarp 20 20 -root | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte 'sleep 2' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $blue | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $origN | ||
+ | xwit -rwarp 20 20 -root | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | $yellow | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $origN | ||
+ | xwit -rwarp 20 20 -root | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | $orange | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $origN | ||
+ | xwit -rwarp 20 20 -root | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | #Image2 | ||
+ | if [ $canX > $canY ]; then | ||
+ | let SEG2=$canY/ | ||
+ | else let SEG2=$canX/ | ||
+ | fi | ||
+ | origN2=" | ||
+ | $black | ||
+ | xte ' | ||
+ | xte 'sleep 3' | ||
+ | $line | ||
+ | xte ' | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | $menuDwn | ||
+ | xte ' | ||
+ | $origP | ||
+ | for (( count=0; count < 7; count++)); do | ||
+ | $btnDwnP | ||
+ | done | ||
+ | xte 'sleep 3' | ||
+ | xte ' | ||
+ | xte 'sleep 1' | ||
+ | $origN2 | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | $origN2 | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | $origN2 | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte ' | ||
+ | $origP | ||
+ | for (( count=0; count<9; count++ )); do | ||
+ | $btnDwnP | ||
+ | done | ||
+ | xte ' | ||
+ | $ltBlu | ||
+ | xte ' | ||
+ | $origN2 | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | $origN2 | ||
+ | xte " | ||
+ | xte ' | ||
+ | xte " | ||
+ | xte ' | ||
+ | $grey | ||
+ | xte ' | ||
+ | $origN2 | ||
+ | xte ' | ||
+ | $origN</ | ||
+ | |||