1 package com.tapina.robe.swi.clib.string;
2
3 import com.tapina.robe.runtime.ByteArray;
4 import com.tapina.robe.runtime.Environment;
5 import com.tapina.robe.runtime.MemoryMap;
6 import com.tapina.robe.swi.clib.Stub;
7
8 /***
9 * This function compares the first a3 characters of each object and returns a value accordingly.
10 * Returns: Greater than, less than or equal to zero, depending if the object pointed to by a1 is greater than,
11 * less than or equal to the object pointed to by a2.
12 */
13 public class MemCmp extends Stub {
14 public void executeStub(Environment environment) {
15 final MemoryMap memoryMap = environment.getMemoryMap();
16 final int[] R = environment.getCpu().R;
17 final ByteArray obj1 = memoryMap.getByteArray(R[0], R[2], false);
18 final ByteArray obj2 = memoryMap.getByteArray(R[1], R[2], false);
19 for (int i = 0; i < R[2]; i++) {
20 final int b1 = obj1.getByte(i);
21 final int b2 = obj2.getByte(i);
22 if (b1 < b2) {
23 R[0] = -1;
24 return;
25 } else if (b1 > b2) {
26 R[0] = 1;
27 return;
28 }
29 }
30 R[0] = 0;
31 }
32 }