+/*
+ * Move the window to the top of its group.
+ * Don't do it if already fully visible.
+ * Wwvisible() doesn't work for tinted windows.
+ * But anything to make it faster.
+ * Always reframe() if doreframe is true.
+ */
+front(w, doreframe)
+register struct ww *w;
+char doreframe;
+{
+ if (w->ww_back != (isfg(w) ? framewin : fgwin) && !wwvisible(w)) {
+ deletewin(w);
+ addwin(w, isfg(w));
+ doreframe = 1;
+ }
+ if (doreframe)
+ reframe();
+}
+
+/*
+ * Add a window at the top of normal windows or foreground windows.
+ * For normal windows, we put it behind the current window.
+ */
+addwin(w, fg)
+register struct ww *w;
+char fg;
+{
+ if (fg) {
+ wwadd(w, framewin);
+ if (fgwin == framewin)
+ fgwin = w;
+ } else
+ wwadd(w, selwin != 0 && selwin != w && !isfg(selwin)
+ ? selwin : fgwin);
+}
+
+/*
+ * Delete a window.
+ */
+deletewin(w)
+register struct ww *w;
+{
+ if (fgwin == w)
+ fgwin = w->ww_back;
+ wwdelete(w);
+}
+
+reframe()
+{
+ register struct ww *w;
+
+ wwunframe(framewin);
+ for (w = wwhead.ww_back; w != &wwhead; w = w->ww_back)
+ if (w->ww_hasframe) {
+ wwframe(w, framewin);
+ labelwin(w);
+ }
+}
+
+labelwin(w)
+register struct ww *w;
+{
+ int mode = w == selwin ? WWM_REV : 0;
+
+ if (!w->ww_hasframe)
+ return;
+ if (w->ww_id >= 0) {
+ char buf[2];
+
+ buf[0] = w->ww_id + '1';
+ buf[1] = 0;
+ wwlabel(w, framewin, 1, buf, mode);
+ }
+ if (w->ww_label) {
+ int col;
+
+ if (w->ww_center) {
+ col = (w->ww_w.nc - strlen(w->ww_label)) / 2;
+ col = MAX(3, col);
+ } else
+ col = 3;
+ wwlabel(w, framewin, col, w->ww_label, mode);
+ }
+}
+
+stopwin(w)
+ register struct ww *w;
+{
+ w->ww_stopped = 1;
+ if (w->ww_pty >= 0 && w->ww_ispty)
+ (void) ioctl(w->ww_pty, (int)TIOCSTOP, (char *)0);
+}
+
+startwin(w)
+ register struct ww *w;
+{
+ w->ww_stopped = 0;
+ if (w->ww_pty >= 0 && w->ww_ispty)
+ (void) ioctl(w->ww_pty, (int)TIOCSTART, (char *)0);
+}
+
+sizewin(w, nrow, ncol)
+register struct ww *w;
+{
+ struct ww *back = w->ww_back;
+
+ w->ww_alt.nr = w->ww_w.nr;
+ w->ww_alt.nc = w->ww_w.nc;
+ wwdelete(w);
+ if (wwsize(w, nrow, ncol) < 0)
+ error("Can't resize window: %s.", wwerror());
+ wwadd(w, back);
+ reframe();
+}
+