Never mind, I finally got it:
Code:
int div__mcc_int( mcc_int_t *num, mcc_int_t const * const val, mcc_int_t *rem ) {
	int ret = mcc_int_validate2( num, val );
	mcc_int_t seg = {0};
	mcc_int_seg_t bits = 0;
	if ( ret != EXIT_SUCCESS ) return ret;
	ret = mcc_int_validate(rem);
	if ( ret != EXIT_SUCCESS )
		return (ret == EADDRNOTAVAIL) ? EDESTADDRREQ : ret;
	if ( rem->size != num->size ) return ERANGE;
	(void)memcpy( rem->zero.seg, num->zero.seg, num->size );
	(void)memset( num->zero.seg, 0, num->size );
	if ( eql__mcc_int( val, NULL ) ) return EXIT_SUCCESS;
	seg = *rem;
	while ( seg.stop.b ) {
		seg.stop = dec_mcc_bit(seg.stop);
		if ( *(seg.stop.seg) & seg.stop.bit ) {
			seg.stop = inc_mcc_bit(seg.stop);
			break;
		}
	}
	seg.zero = seg.stop;
	seg.zero = dec_mcc_bit(seg.zero);
	while ( seg.zero.b ) {
		if ( gte__mcc_int( &seg, val ) ) {
			shl___mcc_int( num, bits );
			sub__mcc_int( &seg, val );
			*(num->zero.seg) |= num->zero.bit;
			bits = 0;
		}
		++bits;
		seg.zero = dec_mcc_bit(seg.zero);
	}
	if ( bits ) shl___mcc_int( num, bits );
	return EXIT_SUCCESS;
}
I can now finally convert my FPN function and see if it was just not enough space in the integer. BTW anyone planning on using the functions for themselves should note that I forgot to clear num in mul__mcc_int() before the loop.