\ Picture words give a flag based on x and y.
0 Value x 0 Value y \ 10000x fixed decimal.
: from-sq ( nn-n) swap - dup 10000 */ ;
: disc ( rxy-f) y from-sq swap x from-sq + > ;
: udisc ( -f) 10000 0 0 disc ;
: vert ( -f) x -1500 -6000 within ;
: horz ( -f) y -2000 -4000 within ;
: smash ( -f) udisc vert and horz and ;
: pair ( r-ff) dup 0 5000 disc swap 0 -5000 disc ;
: wave ( -f) 2500 pair invert x 0< and or ;
: eyes ( -f) 278 pair or ;
: yinyang ( -f) udisc wave xor eyes xor ;
: pit ( -f) x 7143 1429 within y 1429 < or ;
: pit+ ( f-f) pit and x negate y to x to y ;
: manji ( -f) true pit+ pit+ pit+ pit+ ;
\ Emit UTF-8 for Braille U+28XX, given XX.
: emitb8 ( c-) ?dup-0=-IF $40 THEN $E2 emit
dup 6 rshift $A0 or emit $3F and $80 or emit ;
: ~ c, ; \ Dot row/col per Braille bit: 0 3
: CVals ( -;i-c) Create does> + c@ ; \ 1 4
CVals dr 0 ~ 1 ~ 2 ~ 0 ~ 1 ~ 2 ~ 3 ~ 3 ~ \ 2 5
CVals dc 0 ~ 0 ~ 0 ~ 1 ~ 1 ~ 1 ~ 0 ~ 1 ~ \ 6 7
\ Screen row/col/dot to pic x/y, -10000 to 10000.
0 Value r 0 Value c 0 Value d Defer pic ( -f)
12 dup Constant hgt 2* Constant wid
: toy ( -) r 4 * d dr + -5000 hgt */ 10000 + to y ;
: tox ( -) c 2 * d dc + 10000 wid */ 10000 - to x ;
: dotbit ( -c) toy tox pic 1 and d lshift ;
: calcb8 ( -c) 0 8 0 DO i to d dotbit or LOOP ;
: line ( -) wid 0 DO i to c calcb8 emitb8 LOOP ;
: draw ( -) hgt 0 DO i to r cr line LOOP ;
\ ' smash is pic draw
: 3pic ( -xxx) ['] smash ['] yinyang ['] manji ;
: 3line ( xxx-) 3 0 DO is pic line 2 spaces LOOP ;
: 3draw ( -) hgt 0 DO i to r cr 3pic 3line LOOP ;
3draw