+#ifdef PC
+/*
+ * assignment to conformant arrays. Since these are variable length,
+ * we use blkcpy() to perform the assignment.
+ * blkcpy(rhs, lhs, (upper - lower + 1) * width)
+ */
+struct nl *
+pcasgconf(r, p)
+ register ASG_NODE *r;
+ struct nl *p;
+{
+ struct nl *p1;
+
+ if (r == (ASG_NODE *) TR_NIL || p == NLNIL)
+ return NLNIL;
+ putleaf( PCC_ICON , 0 , 0 , PCCM_ADDTYPE( PCCTM_FTN | PCCT_INT , PCCTM_PTR) , "_blkcpy" );
+ p1 = rvalue( r->rhs_expr , p , LREQ );
+ if (p1 == NLNIL)
+ return NLNIL;
+ p = lvalue( r->lhs_var , MOD|ASGN|NOUSE , LREQ );
+ if (p == NLNIL)
+ return NLNIL;
+ putop(PCC_CM, PCCT_INT);
+ /* upper bound */
+ p1 = p->chain->nptr[1];
+ putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
+ p1->extra_flags, p2type( p1 ) );
+ /* minus lower bound */
+ p1 = p->chain->nptr[0];
+ putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
+ p1->extra_flags, p2type( p1 ) );
+ putop( PCC_MINUS, PCCT_INT );
+ /* add one */
+ putleaf(PCC_ICON, 1, 0, PCCT_INT, 0);
+ putop( PCC_PLUS, PCCT_INT );
+ /* and multiply by the width */
+ p1 = p->chain->nptr[2];
+ putRV(p1->symbol, (p1->nl_block & 037), p1->value[0],
+ p1->extra_flags, p2type( p1 ) );
+ putop( PCC_MUL , PCCT_INT );
+ putop(PCC_CM, PCCT_INT);
+ putop(PCC_CALL, PCCT_INT);
+ putdot( filename , line);
+ return p;
+}
+#endif PC
+