mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 16:34:07 +00:00
58 lines
1.2 KiB
Plaintext
58 lines
1.2 KiB
Plaintext
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
|