2004-02-13 [VI] This isn't a screen saver really. It just uses the [minimalist curses] package to draw boxes of various sizes on your screen. Any keypress exits it. There's some element of randomness in how often it draws because every second it picks four coordinates. But it only draws a rectangle if those coordinates make sense. Only works on terminals that support vt100 like alt character set : true of linux, vt100 and xterm and derivatives. Any keypress exits. #!/usr/local/tcl/8.4.5/bin/tclsh8.4 package require curses # Order is nswe set ldc(nw) j set ldc(ne) m set ldc(se) l set ldc(sw) k set ldc(nswe) n set ldc(we) q set ldc(nse) t set ldc(nsw) u set ldc(nwe) v set ldc(swe) w set ldc(ns) x proc box {row1 col1 row2 col2} { global ldc curses attr on alt curses move $row1 $col1 curses puts $ldc(se) curses move $row2 $col1 curses puts $ldc(ne) for {set i [expr $row1 + 1] } {$i < $row2} {incr i} { curses move $i $col1 curses puts $ldc(ns) curses move $i $col2 curses puts $ldc(ns) } for {set i [expr $col1 + 1] } {$i < $col2} {incr i} { curses move $row1 $i curses puts $ldc(we) curses move $row2 $i curses puts $ldc(we) } curses move $row1 $col2 curses puts $ldc(sw) curses move $row2 $col2 curses puts $ldc(nw) } set rows [curses info lines] set cols [curses info cols] expr srand([clock seconds]) curses timeout 0 set i 0 while {1} { incr i if {$i % 2 == 0} { curses attr on reverse } else { curses attr off reverse } set row1 [expr int(rand()*$rows)] set row2 [expr int(rand()*$rows)] set col1 [expr int(rand()*$cols-1)] set col2 [expr int(rand()*$cols-1)] after 1000 if {[curses getch] != -1} break if {$row2 - $row1 < 2 || $col2 - $col1 < 2} continue box $row1 $col1 $row2 $col2 curses refresh }