Sammy,
We need to add a few functions to make this work more smoothly. And in writing this email, I seem to recall some low-level functions I used back in the day which did this more efficiently. I can't remember. I might've been in the console version, and I directly painted attributes using the console functions.
1) GetAttrXYH() which populates a string with the character attributes beginning at X,Y, for LEN horizontally.
2) GetAttrXYV() which populates a string with the character attributes beginning at X,Y, for LEN vertically.
3) PutAttrXYV() which puts attributes on the screen vertically from X,Y for LEN.
Those three would greatly speed up the rendering, as it would remove the need for a window refresh and the update could be left on with near instantaneous results. Another idea would be to add a second attribute layer that could be specified. It would allow the normal rendering functions to update the normal attributes, but for some new special functions to specify the new layer of attributes for a temporary overlay. PutAttrXY() and PutAttrXYV() could accept negative colors to render into that layer, and some new values like 256 to render from the normal attribute layer, and -256 to render from the second attribute layer. In any event...
-----
// Set some color
integer cross_color = Color(bright white on cyan)
// cross_x, cross_y are where the cursor is
integer i
integer cross_x = CurrCol()
integer cross_y = CurrLine()
// Paint horizontal
PutAttrXY(1, cross_y, cross_color, Query(ScreenCols))
// Paint vertical
// Needs: PutAttrXYV(cross_x, 1, cross_color, Query(ScreenRows))
for i = 1 to Query(ScreenCols)
PutAttrXY(cross_x, i, cross_color, 1)
endfor
Wait for a key, then:
UpdateDisplay(_ALL_WINDOWS_REFRESH_)
--
Rick C. Hodgin