run_ctrlat = proc (e: env, c: char) signals (errmsg(string), stop(env, string)) if e.this_arg > 1 cor e.this_arg < 0 then top_display(e, "GCing") secs1, msecs1, usecs1: int := _get_runtime() freed: int := gc() left: int := _heap_size() secs2, msecs2, usecs2: int := _get_runtime() secs2, msecs2, usecs2 := _longsub(secs2, msecs2, usecs2, secs1, msecs1, usecs1) top_display(e, "GC #" || int$unparse(_gc$count()) || ": " || int$unparse(freed) || " freed, " || int$unparse(left) || " left, " || _time_format(secs2, msecs2, usecs2)) elseif e.this_arg = 0 then if env$fetch_num(e, "careful", 0) ~= 0 then cnt: int := 0 nms: string := "" for b: buf, bnm, fnm: string in bufset$all_buffers() do if buf$any_changed(b) then if cnt = 2 then nms := nms || ", ..." break elseif cnt = 1 then nms := string$append("s" || nms, ',') end nms := string$append(nms, ' ') || bnm cnt := cnt + 1 end end if cnt > 0 cand ~mconfirm(e, "Buffer" || nms || " changed, quit anyway", true) then return end end keypad: int := env$fetch_num(e, "keypad", 0) if keypad ~= 0 then _set_keypad_mode(false) end _normal_chars() screen$destroy() quit_() else olines, ochars: int := _get_screen_size() _normal_chars() _ted_chars() nlines, nchars: int := _get_screen_size() if nlines ~= olines cor nchars ~= ochars then n: int := 1 otop: int := 0 ntop: int := 0 for ee: env in winset$all() do ee.size := (ee.size * nlines) / olines ee.width := nchars - 1 if ee.top_line = otop then ee.top_line := ntop else otop := ee.top_line ntop := n ee.top_line := n n := n + ee.size + 1 end if env$is_argenv(ee) then continue end title: string := ee.title i: int := string$size(title) while title[i] = '-' cor title[i] = ' ' do i := i - 1 end except when bounds: end update_title(ee, string$substr(title, 1, i)) end if n < nlines then n := nlines - n for ee: env in winset$all() do if ee.top_line = 1 then ee.size := ee.size + n else ee.top_line := ee.top_line + n end end end end env$clear(e) end resignal errmsg end run_ctrlat