m_add(a
,b
,c
) struct mint
*a
,*b
,*c
;
cval
=xalloc(a
->len
+1,"m_add");
{ x
=carry
+a
->val
[i
]+b
->val
[i
];
if(x
&0100000) cval
[i
]=x
&077777;
if(c
->len
==0) shfree(cval
);
madd(a
,b
,c
) struct mint
*a
,*b
,*c
;
if(x
.len
>=y
.len
) m_add(&x
,&y
,&z
);
m_sub(a
,b
,c
) struct mint
*a
,*b
,*c
;
one
=1; mone
.len
= 1; mone
.val
= &one
;
c
->val
=xalloc(a
->len
,"m_sub");
{ x
=borrow
+a
->val
[i
]-b
->val
[i
];
if(x
&0100000) c
->val
[i
]=x
&077777;
{ for(i
=0;i
<a
->len
;i
++) c
->val
[i
] ^= 077777;
for(i
=a
->len
-1;i
>=0;--i
) if(c
->val
[i
]>0)
{ if(borrow
==0) c
->len
=i
+1;
msub(a
,b
,c
) struct mint
*a
,*b
,*c
;
if(x
.len
>=y
.len
) m_sub(&x
,&y
,&z
);
if(a
==c
&& x
.len
!=0) xfree(a
);
else if(b
==c
&& y
.len
!=0) xfree(b
);