home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
sa104os2.zip
/
SATHR104.ZIP
/
SATHER
/
SYSTEM
/
INT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-10-25
|
2KB
|
69 lines
#include "header.h"
/* INT functions which are "built-in" to the Sather system. */
#define RAISE_OVERFLOW fprintf(stderr,"\nInteger overflow detected\n")
#define RAISE_DIV_ZERO fprintf(stderr,"\nDivision by zero detected\n")
#define RAISE_MOD_ZERO fprintf(stderr,"\nModulo by zero detected\n")
/*************** INT ****************/
INT c_INT_plus_INT_INT_chk(INT a, INT b) { /* INT::plus(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return a+b;
}
INT c_INT_minus_INT_INT_chk(INT a, INT b) { /* INT::minus(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return a-b;
}
INT c_INT_times_INT_INT_chk(INT a, INT b) { /* INT::times(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return a*b;
}
INT c_INT_div_INT_INT_chk(INT a, INT b) { /* INT::div(INT):INT */
int q;
if (b==0) RAISE_DIV_ZERO;
q = a/b;
return a < 0 && a != q*b ? q-1 : q;
}
INT c_INT_mod_INT_INT_chk(INT a, INT b) { /* INT::mod(INT):INT */
int r;
if (b==0) RAISE_MOD_ZERO;
r = a%b;
return r < 0 ? r+b : r;
}
INT c_INT_uplus_INT_INT_chk(INT a, INT b) { /* INT::uplus(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return ((unsigned)a)+((unsigned)b);
}
INT c_INT_uminus_INT_INT_chk(INT a, INT b) { /* INT::uminus(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return ((unsigned)a)-((unsigned)b);
}
INT c_INT_utimes_INT_INT_chk(INT a, INT b) { /* INT::utimes(INT):INT */
/* ADD OVERFLOW CHECK!!! */
return ((unsigned)a)*((unsigned)b);
}
INT c_INT_udiv_INT_INT_chk(INT a, INT b) { /* INT::udiv(INT):INT */
if (((unsigned)b)==0) RAISE_DIV_ZERO;
return ((unsigned)a)/((unsigned)b);
}
INT c_INT_umod_INT_INT_chk(INT a, INT b) { /* INT::umod(INT):INT */
if (((unsigned)b)==0) RAISE_MOD_ZERO;
return ((unsigned)a)%((unsigned)b);
}
INT c_INT_rshift_INT_INT(INT a, INT b) { /* INT::rshift(INT):INT */
if (a<0) return a>>b;
return ~((~a)>>b);
}