Class new title: Menu subclassof: Object fields: 'str text thisline frame' declare: '' bug | t1 t2 [t2 _ self movingsetup. t1 _ self bugit. frame bitsFromString: t2. t1] bugit | t1 t2 [user nobug  [0] thisline comp. while true do [t1 _ user mp. text frame has: t1  [user anybug  [thisline has: t1  [] t1 _ text ptofpt: t1. thisline comp. thisline moveto: text frame origin x  t1 y. thisline comp] 1 + (thisline origin y - text frame origin y / text lineheight)] thisline comp. until (text frame has: user mp) do [user nobug  [0]]. thisline comp]] clear [frame clear] fbug | t1 [t1 _ self bugit. t1] frame [frame] has: t1 [text frame has: t1] moveto: t1 [self clear. frame moveto: t1. text frame moveto: t1 + 2. thisline moveto: t1 + 2] movingsetup | t1 t2 [t1 _ user mp - thisline center. text frame moveby: t1. thisline moveby: t1. frame moveby: t1. t2 _ frame bitsIntoString. frame clear: black. text displayall. t2] rebug [user waitbug. self bug] rescan [self string: str] show [frame clear: black. text displayall] string: t1 | t2 t3 t4 [str _ t1. [str last  13  [str _ str + ' ']]. t4 _ str asParagraph. t3 _ 0  0. text _ Textframe new para: t4 frame: (Rectangle new origin: t3 corner: 1000  1000). t3 _ text maxx: str length + 1. text frame growto: t3 + (4  0). text measureall. t4 center. frame _ text frame inset: 2  2. thisline _ Rectangle new origin: text frame origin corner: text frame corner x  text lineheight] stringFromVector: t1 | t2 [t2 _ Stream default. for t1 from: t1 do [t2 append: t1. t2 cr]. self string: t2 contents] zbug | t1 t2 [t2 _ self movingsetup. while [t1 _ self bugit. t1 = 0] do []. frame bitsFromString: t2. t1]