+int
+blk_exp(MACRO_PROT_ARGS)
+{
+ struct man_node *n;
+ int la;
+ char *p;
+
+ /* Close out prior implicit scopes. */
+
+ if ( ! rew_scope(MAN_BLOCK, man, tok))
+ return(0);
+
+ if ( ! man_block_alloc(man, line, ppos, tok))
+ return(0);
+ if ( ! man_head_alloc(man, line, ppos, tok))
+ return(0);
+
+ for (;;) {
+ la = *pos;
+ if ( ! man_args(man, line, pos, buf, &p))
+ break;
+ if ( ! man_word_alloc(man, line, la, p))
+ return(0);
+ }
+
+ assert(man);
+ assert(tok != MAN_MAX);
+
+ for (n = man->last; n; n = n->parent) {
+ if (n->tok != tok)
+ continue;
+ assert(MAN_HEAD == n->type);
+ man_unscope(man, n);
+ break;
+ }
+
+ return(man_body_alloc(man, line, ppos, tok));
+}