File: funmod.c

package info (click to toggle)
icmake 6.21-4
  • links: PTS
  • area: main
  • in suites: hamm, potato, slink
  • size: 1,964 kB
  • ctags: 1,053
  • sloc: ansic: 9,245; makefile: 1,139; sh: 141; asm: 126
file content (36 lines) | stat: -rw-r--r-- 785 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
\funcref{fun\_mod}{void fun\_mod ()}
    {}
    {}
    {pop(), push(), error()}
    {}
    {funmod.c}
    {
        This function pops two variables and pushes the modulo value of the
        {\em vu.intval} fields of these variables. The resulting pushed
        variable is of type {\em e\_int}.

        It is assumed that the left argument of the modision was pushed first;
        therefore, the right argument is popped first. A division by zero leads
        to an error.
    }
*/

#include "icm-exec.h"

void fun_mod ()
{
    VAR_
        tmp;
    int
        rvalint;

    tmp.type = e_int;
    rvalint = pop ().vu.intval;
    if (! rvalint)
        error ("divide by zero at %s", hexstring (curoffs, 4));

    tmp.vu.intval = pop().vu.intval % rvalint;

    push (tmp);
}