5 static int cp_nblk
; /* input block depth (text in \{ and \}) */
6 static int cp_sblk
[NIES
]; /* skip \} escape at this depth, if set */
7 static int cp_widreq
= 1; /* inline \w requests */
9 static void cparg(char *d
)
16 } else if (!n_cp
&& c
== '[') {
18 while (i
< NMLEN
- 1 && c
>= 0 && c
!= ']') {
28 static int regid(void)
35 static void cp_num(void)
39 if (c
!= '-' && c
!= '+')
42 if (c
== '-' || c
== '+')
43 num_get(id
, c
== '+' ? 1 : -1);
45 in_push(num_str(id
), NULL
);
48 static void cp_str(void)
50 char *buf
= str_get(regid());
55 static void cp_numfmt(void)
57 in_push(num_getfmt(regid()), NULL
);
60 static void cp_arg(void)
66 argnum
= atoi(argname
);
67 if (argnum
> 0 && argnum
< NARGS
+ 1)
73 static void cp_width(void)
76 sprintf(wid
, "%d", ren_wid(cp_next
, cp_back
));
80 static int cp_raw(void)
108 if (c
== '{' && cp_nblk
< LEN(cp_sblk
))
109 cp_sblk
[cp_nblk
++] = 0;
110 if (c
== '}' && cp_nblk
> 0)
111 if (cp_sblk
[--cp_nblk
])
128 while (c
>= 0 && c
!= '\n')
130 } else if (c
== 'w' && cp_widreq
) {
133 } else if (c
== 'n') {
136 } else if (c
== '*') {
139 } else if (c
== 'g') {
142 } else if (c
== '$') {
153 void cp_blk(int skip
)
158 c
= skip
? cp_raw() : cp_next();
159 } while (c
== ' ' || c
== '\t');
161 while (c
>= 0 && (c
!= '\n' || cp_nblk
> nblk
))
164 if (c
== c_ec
&& in_top() == '{') { /* a troff \{ \} block */
173 void cp_wid(int enable
)