Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/clib/ldiv.c
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

57 lines
635 B
C

long ldivr = 0;
long ldiv(al1,al2)
long al1,al2;
{
register long l1,l2,q,b;
register int sign;
sign = 0;
l1 = al1;
l2 = al2;
if(l2==0) {
ldivr = 0x80000000;
return(0x80000000);
}
if(l2 > l1) {
ldivr = l1;
return(0);
}
if(l1<0) {
l1 = -l1;
sign++;
}
if(l2<0) {
l2 = -l2;
sign++;
}
if(l1==l2) {
q = 1;
l1 = 0;
goto doret;
}
b = 1; /* bit value */
while(l1>=l2) {
l2 =<< 1;
b =<< 1;
}
q = 0;
while(b) { /* now do shifts and subtracts */
if(l1>=l2) {
q =| b;
l1 =- l2;
}
b =>> 1;
l2 =>> 1;
}
doret:
if(sign==1) {
ldivr = -l1;
return(-q);
}
ldivr = l1;
return(q);
}