multiprogress.[ch]: Save and restore `PC' in the render state.
authorMark Wooding <mdw@distorted.org.uk>
Fri, 25 Mar 2022 00:42:44 +0000 (00:42 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Fri, 25 Mar 2022 18:51:45 +0000 (18:51 +0000)
multiprogress.c
multiprogress.h

index 3d4ba8c..4254e13 100644 (file)
@@ -116,7 +116,7 @@ int progress_init(struct progress_state *progress)
 
   if (tgetflag("ut") > 0) tty->cap.f |= TCF_BCE;
 
-  t = tgetstr("pc", &capcur); PC = t ? *t : 0;
+  t = tgetstr("pc", &capcur); tty->cap.pc = t ? *t : 0;
 
   SETDIM(defwd, "COLUMNS", tgetnum("co"), 80);
   SETDIM(defht, "LINES", tgetnum("li"), 25);
@@ -257,6 +257,7 @@ static int setup_render_state(struct progress_state *progress,
 #ifdef USE_TERMCAP
   render->old_bc = BC; BC = 0;
   render->old_up = UP; UP = 0;
+  render->old_pc = PC; PC = tty->cap.pc;
 #endif
 
   if (!ioctl(fileno(tty->fp), TIOCGWINSZ, &wsz))
@@ -277,6 +278,7 @@ static void free_render_state(struct progress_render_state *render)
 #ifdef USE_TERMCAP
   UP = render->old_up;
   BC = render->old_bc;
+  PC = render->old_pc;
 #endif
 }
 
index a1121eb..b501292 100644 (file)
@@ -13,11 +13,12 @@ struct progress_ttyinfo {
     const char *cr, *nw, *up, *ce, *cd;        /*   cursor motion */
     const char *mr, *md, *me;          /*   reverse video, bold */
     const char *af, *ab, *op;          /*   colour */
+    char pc;                           /*   pad character (termcap) */
   } cap;
   unsigned defwd, defht;               /* default width and height */
 };
 #define PROGRESS_TTYINFO_INIT                                          \
-       { 0,  0, 0,  { 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0 },  80, 25 }
+       { 0,  0, 0,  { 0,  0, 0, 0, 0, 0,  0, 0, 0,  0, 0, 0,  0 },  80, 25 }
 
 struct progress_state {
   struct progress_ttyinfo tty;         /* terminal state */
@@ -35,7 +36,7 @@ struct progress_render_state {
   char *tempbuf; size_t tempsz;                /* scratch buffer */
   size_t leftsz, rightsz;              /* left and right cursors */
   unsigned leftwd, rightwd;            /* left and right widths */
-  char *old_bc, *old_up;               /* old fixup strings */
+  char *old_bc, *old_up, old_pc;       /* saved `termcap' globals */
 };
 
 struct progress_item {