diff --git a/rtl/SYSTEM.java b/rtl/SYSTEM.java
index f98236bd90926eeb0ca4d8dd58c46e190e43cd8e..28d8c466df99d528685380520b5429a2248a18e5 100644 (file)
--- a/rtl/SYSTEM.java
+++ b/rtl/SYSTEM.java
return i;
}
- /* Встроенная процедура COPY(x, v) */
public static void COPY(byte[] x, byte[] v)
{
- int len_x = LEN(x);
- int len_v = v.length - 1;
- int len = (len_x < len_v) ? (len_x) : (len_v);
- for(int i = 0; i < len; i++)
+ int ix = LEN(x);
+ int iv = v.length - 1;
+
+ int i = 0;
+ int len = (ix < iv) ? (ix) : (iv);
+ while(i < len)
{
v[i] = x[i];
+ i += 1;
+ }
+ v[i] = 0;
+ }
+
+ public static int STRCMP(byte[] a, byte[] b)
+ {
+ int i = 0;
+ while(a[i] != 0 && a[i] == b[i])
+ {
+ i += 1;
}
- v[len] = 0;
+ return a[i] - b[i];
}
public static void HALT(long n)
{
assert x : n;
}
+
+ public static void TRAP(long n)
+ {
+ if(n == -1)
+ {
+ throw new RuntimeException("CASE TRAP");
+ }
+ else if(n == -2)
+ {
+ throw new RuntimeException("WITH TRAP");
+ }
+ else
+ {
+ throw new RuntimeException("TRAP CODE " + n);
+ }
+ }
}