ref: 119c7108f947a6f1608ac429b0057335fd0e51a9
parent: 065f07f73e8dcd360a6f1e752cfdca0ac645d2e2
author: Ali Gholami Rudi <ali@rudi.ir>
date: Sat Mar 21 22:18:10 EDT 2020
roff.h: \n(.% number register for real page number
--- a/ren.c
+++ b/ren.c
@@ -35,7 +35,6 @@
static int bp_first = 1; /* prior to the first page */
static int bp_next = NOPAGE; /* next page number */
-static int bp_count; /* number of pages so far */
static int bp_ejected; /* current ejected page */
static int bp_final; /* 1: executing em, 2: the final page, 3: the 2nd final page */
static int ren_level; /* the depth of render_rec() calls */
@@ -136,8 +135,8 @@
n_h = 0;
n_pg = bp_next != NOPAGE ? bp_next : n_pg + 1;
bp_next = NOPAGE;
- bp_count++;
- out("p%d\n", n_pg);
+ n_PG += 1;
+ out("p%d\n", n_PG);
out("V%d\n", 0);
if (trap_pos(-1) == 0)
trap_exec(trap_reg(-1));
@@ -498,10 +497,10 @@
static void ren_ejectpage(int br)
{
ren_first();
- bp_ejected = bp_count;
+ bp_ejected = n_PG;
if (br)
ren_br();
- while (bp_count == bp_ejected && !cdiv) {
+ while (n_PG == bp_ejected && !cdiv) {
if (detect_traps(n_d, n_p)) {
ren_traps(n_d, n_p, 1);
} else {
--- a/roff.h
+++ b/roff.h
@@ -492,6 +492,7 @@
#define n_sb (*nreg(map("sb")))
#define n_st (*nreg(map("st")))
#define n_pg (*nreg(map("%"))) /* % */
+#define n_PG (*nreg(DOTMAP('%'))) /* number of ejected pages */
#define n_lb (*nreg(map(".b0"))) /* input line beg */
#define n_ce (*nreg(map(".ce"))) /* .ce remaining */
#define n_f0 (*nreg(map(".f0"))) /* last .f */