1\ Copyright (c) 2003 Scott Long <scottl@FreeBSD.org> 2\ Copyright (c) 2012-2015 Devin Teske <dteske@FreeBSD.org> 3\ All rights reserved. 4\ 5\ Redistribution and use in source and binary forms, with or without 6\ modification, are permitted provided that the following conditions 7\ are met: 8\ 1. Redistributions of source code must retain the above copyright 9\ notice, this list of conditions and the following disclaimer. 10\ 2. Redistributions in binary form must reproduce the above copyright 11\ notice, this list of conditions and the following disclaimer in the 12\ documentation and/or other materials provided with the distribution. 13\ 14\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24\ SUCH DAMAGE. 25\ 26 27marker task-frames.4th 28 29vocabulary frame-drawing 30only forth also frame-drawing definitions 31 32\ XXX Filled boxes are left as an exercise for the reader... ;-/ 33 34variable h_el 35variable v_el 36variable lt_el 37variable lb_el 38variable rt_el 39variable rb_el 40variable fill 41 42\ ASCII frames (used when serial console is detected) 43 45 constant ascii_dash 44 61 constant ascii_equal 45124 constant ascii_pipe 46 43 constant ascii_plus 47 48\ Single frames 49196 constant sh_el 50179 constant sv_el 51218 constant slt_el 52192 constant slb_el 53191 constant srt_el 54217 constant srb_el 55\ Double frames 56205 constant dh_el 57186 constant dv_el 58201 constant dlt_el 59200 constant dlb_el 60187 constant drt_el 61188 constant drb_el 62\ Fillings 630 constant fill_none 6432 constant fill_blank 65176 constant fill_dark 66177 constant fill_med 67178 constant fill_bright 68 69only forth definitions also frame-drawing 70 71: hline ( len x y -- ) \ Draw horizontal single line 72 at-xy \ move cursor 73 0 do 74 h_el @ emit 75 loop 76; 77 78: f_ascii ( -- ) ( -- ) \ set frames to ascii 79 ascii_dash h_el ! 80 ascii_pipe v_el ! 81 ascii_plus lt_el ! 82 ascii_plus lb_el ! 83 ascii_plus rt_el ! 84 ascii_plus rb_el ! 85; 86 87: f_single ( -- ) \ set frames to single 88 boot_serial? if f_ascii exit then 89 sh_el h_el ! 90 sv_el v_el ! 91 slt_el lt_el ! 92 slb_el lb_el ! 93 srt_el rt_el ! 94 srb_el rb_el ! 95; 96 97: f_double ( -- ) \ set frames to double 98 boot_serial? if 99 f_ascii 100 ascii_equal h_el ! 101 exit 102 then 103 dh_el h_el ! 104 dv_el v_el ! 105 dlt_el lt_el ! 106 dlb_el lb_el ! 107 drt_el rt_el ! 108 drb_el rb_el ! 109; 110 111: vline ( len x y -- ) \ Draw vertical single line 112 2dup 4 pick 113 0 do 114 at-xy 115 v_el @ emit 116 1+ 117 2dup 118 loop 119 2drop 2drop drop 120; 121 122: box ( w h x y -- ) \ Draw a box 123 2dup 1+ 4 pick 1- -rot 124 vline \ Draw left vert line 125 2dup 1+ swap 5 pick + swap 4 pick 1- -rot 126 vline \ Draw right vert line 127 2dup swap 1+ swap 5 pick 1- -rot 128 hline \ Draw top horiz line 129 2dup swap 1+ swap 4 pick + 5 pick 1- -rot 130 hline \ Draw bottom horiz line 131 2dup at-xy lt_el @ emit \ Draw left-top corner 132 2dup 4 pick + at-xy lb_el @ emit \ Draw left bottom corner 133 2dup swap 5 pick + swap at-xy rt_el @ emit \ Draw right top corner 134 2 pick + swap 3 pick + swap at-xy rb_el @ emit 135 2drop 136; 137 138f_single 139fill_none fill ! 140 141only forth definitions 142