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

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