1File: LDIV.C Page 1 1 long ldivr = 0; 2 3 long ldiv(al1,al2) 4 long al1,al2; 5 { 6 7 register long l1,l2,q,b; 8 register int sign; 9 10 sign = 0; 11 l1 = al1; 12 l2 = al2; 13 if(l2==0) { 14 ldivr = 0x80000000; 15 return(0x80000000); 16 } 17 if(l2 > l1) { 18 ldivr = l1; 19 return(0); 20 } 21 if(l1<0) { 22 l1 = -l1; 23 sign++; 24 } 25 if(l2<0) { 26 l2 = -l2; 27 sign++; 28 } 29 if(l1==l2) { 30 q = 1; 31 l1 = 0; 32 goto doret; 33 } 34 b = 1; /* bit value */ 35 while(l1>=l2) { 36 l2 =<< 1; 37 b =<< 1; 38 } 39 q = 0; 40 while(b) { /* now do shifts and subtracts */ 41 if(l1>=l2) { 42 q =| b; 43 l1 =- l2; 44 } 45 b =>> 1; 46 l2 =>> 1; 47 } 48 doret: 49 if(sign==1) { 50 ldivr = -l1; 51 return(-q); 52 } 53 ldivr = l1; 54 return(q); 55 } 56