Skip to content

Commit 9fc40e7

Browse files
committed
Add Math.Mod and remove redundant * in DEFINITION modules
1 parent 9a0e88a commit 9fc40e7

27 files changed

+290
-68
lines changed

Makefile

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
JAVA_SOURCES = src/java/Files_FileDesc.java src/java/Files.java \
55
src/java/OberonRuntime.java src/java/Os.java src/java/Out.java \
6-
src/java/In.java
6+
src/java/In.java src/java/Math.java
77
MOD_SOURCES = src/Out.Mod src/Os.Mod src/Files.Mod src/Strings.Mod src/OJS.Mod \
88
src/CpCache.Mod src/Opcodes.Mod src/ClassFormat.Mod src/OJB.Mod \
9-
src/OJG.Mod src/OJP.Mod src/oberonc.Mod src/In.Mod
9+
src/OJG.Mod src/OJP.Mod src/oberonc.Mod src/In.Mod src/Math.Mod
1010

1111
build:
1212
mkdir -p out/
@@ -31,7 +31,7 @@ runFern:
3131
mkdir -p examples/fern/out/
3232
javac -cp $(OBERON_BIN) -d examples/fern/out examples/fern/java/*.java
3333
java -cp $(OBERON_BIN) oberonc examples/fern/out \
34-
examples/fern/MathUtil.Mod examples/fern/RandomNumbers.Mod \
34+
examples/fern/RandomNumbers.Mod \
3535
examples/fern/XYplane.Mod examples/fern/IFS.Mod
3636
java -cp $(OBERON_BIN):examples/fern/out IFS
3737

bin/Files.class

0 Bytes
Binary file not shown.

bin/In.class

0 Bytes
Binary file not shown.

bin/Math.class

1.53 KB
Binary file not shown.

bin/Math.smb

416 Bytes
Binary file not shown.

bin/Os.class

0 Bytes
Binary file not shown.

bin/Out.class

0 Bytes
Binary file not shown.

examples/fern/MathUtil.Mod

-3
This file was deleted.

examples/fern/RandomNumbers.Mod

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
MODULE RandomNumbers;
2-
IMPORT MathUtil;
2+
IMPORT Math;
33

44
VAR Z: INTEGER;
55

@@ -16,7 +16,7 @@ MODULE RandomNumbers;
1616

1717
PROCEDURE Exp*(mu: REAL): REAL;
1818
BEGIN
19-
RETURN -MathUtil.ln(Uniform())/mu
19+
RETURN -Math.ln(Uniform())/mu
2020
END Exp;
2121

2222
PROCEDURE InitSeed*(seed: INTEGER);

examples/fern/java/MathUtil.java

-5
This file was deleted.

examples/fern/java/XYplane.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import javax.swing.JPanel;
88
import javax.swing.WindowConstants;
99

10-
public class XYplane {
10+
public final class XYplane {
1111
public static final int erase = 0;
1212
public static final int draw = 1;
1313
public static int X, Y, W, H;
@@ -16,6 +16,9 @@ public class XYplane {
1616
private static final int white = Color.WHITE.getRGB();
1717
private static final int black = Color.BLACK.getRGB();
1818

19+
// Ensure non-instantiability
20+
private XYplane() {}
21+
1922
public static void Open() {
2023
W = 800;
2124
H = 800;

make.bat

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
@echo off
22

3-
set JAVA_SOURCES=src/java/Files_FileDesc.java src/java/Files.java src/java/OberonRuntime.java src/java/Os.java src/java/Out.java
4-
set MOD_SOURCES=src/Out.Mod src/Os.Mod src/Files.Mod src/Strings.Mod src/OJS.Mod src/CpCache.Mod src/Opcodes.Mod src/ClassFormat.Mod src/OJB.Mod src/OJG.Mod src/OJP.Mod src/oberonc.Mod
3+
set JAVA_SOURCES=src/java/Files_FileDesc.java src/java/Files.java src/java/OberonRuntime.java src/java/Os.java src/java/Out.java src/java/In.java src/java/Math.java
4+
set MOD_SOURCES=src/Out.Mod src/Os.Mod src/Files.Mod src/Strings.Mod src/OJS.Mod src/CpCache.Mod src/Opcodes.Mod src/ClassFormat.Mod src/OJB.Mod src/OJG.Mod src/OJP.Mod src/oberonc.Mod src/In.Mod src/Math.Mod
55

66

77
if "%~1"=="" goto build
@@ -30,14 +30,14 @@ goto end
3030
:runFern
3131
mkdir "examples/fern/out/"
3232
javac -cp %OBERON_BIN% -d examples/fern/out examples/fern/java/*.java
33-
java -cp %OBERON_BIN% oberonc examples/fern/out examples/fern/MathUtil.Mod examples/fern/RandomNumbers.Mod examples/fern/XYplane.Mod examples/fern/IFS.Mod
33+
java -cp %OBERON_BIN% oberonc examples/fern/out examples/fern/RandomNumbers.Mod examples/fern/XYplane.Mod examples/fern/IFS.Mod
3434
java -cp %OBERON_BIN%;examples/fern/out IFS
3535
goto end
3636

3737
:test
3838
mkdir "tests/out/"
3939
javac -cp %OBERON_BIN% -d tests/out tests/TestRunner.java
40-
java -cp %OBERON_BIN%;tests/out TestRunner
40+
java -Dfile.encoding=UTF-8 -cp %OBERON_BIN%;tests/out TestRunner
4141
goto end
4242

4343
:clean

src/Files.Mod

+30-30
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,42 @@
66

77
DEFINITION Files;
88
CONST
9-
OK* = 0;
10-
EOF* = -1;
11-
IOERROR* = -2;
12-
UTF8ERROR* = -3;
9+
OK = 0;
10+
EOF = -1;
11+
IOERROR = -2;
12+
UTF8ERROR = -3;
1313

1414
TYPE
15-
File* = POINTER TO FileDesc;
15+
File = POINTER TO FileDesc;
1616
FileDesc = RECORD END;
1717
VAR
18-
SEPARATOR*: ARRAY 2 OF CHAR;
18+
SEPARATOR: ARRAY 2 OF CHAR;
1919

20-
PROCEDURE Create*(name: ARRAY OF CHAR): File;
21-
PROCEDURE Open*(name: ARRAY OF CHAR): File;
22-
PROCEDURE Close*(file: File);
20+
PROCEDURE Create(name: ARRAY OF CHAR): File;
21+
PROCEDURE Open(name: ARRAY OF CHAR): File;
22+
PROCEDURE Close(file: File);
2323

24-
PROCEDURE WriteAsciiStr*(file: File; str: ARRAY OF CHAR);
25-
PROCEDURE WriteStr*(file: File; str: ARRAY OF CHAR);
26-
PROCEDURE Write*(file: File; b: BYTE);
27-
PROCEDURE WriteChar*(file: File; c: CHAR);
28-
PROCEDURE WriteBytes*(file: File; b: ARRAY OF BYTE);
29-
PROCEDURE WriteNBytes*(file: File; b: ARRAY OF BYTE; len: INTEGER);
30-
PROCEDURE WriteInt*(file: File; x: INTEGER);
31-
PROCEDURE WriteNum*(file: File; x: INTEGER);
24+
PROCEDURE WriteAsciiStr(file: File; str: ARRAY OF CHAR);
25+
PROCEDURE WriteStr(file: File; str: ARRAY OF CHAR);
26+
PROCEDURE Write(file: File; b: BYTE);
27+
PROCEDURE WriteChar(file: File; c: CHAR);
28+
PROCEDURE WriteBytes(file: File; b: ARRAY OF BYTE);
29+
PROCEDURE WriteNBytes(file: File; b: ARRAY OF BYTE; len: INTEGER);
30+
PROCEDURE WriteInt(file: File; x: INTEGER);
31+
PROCEDURE WriteNum(file: File; x: INTEGER);
3232

33-
PROCEDURE ReadNum*(file: File): INTEGER;
34-
PROCEDURE Read*(file: File): BYTE;
35-
PROCEDURE ReadChar*(file: File): CHAR;
36-
PROCEDURE ReadInt*(file: File): INTEGER;
37-
PROCEDURE ReadBytes*(file: File; VAR b: ARRAY OF BYTE; VAR n: INTEGER);
38-
PROCEDURE ReadAsciiStr*(file: File; VAR str: ARRAY OF CHAR);
39-
PROCEDURE ReadStr*(file: File; VAR str: ARRAY OF CHAR): INTEGER;
33+
PROCEDURE ReadNum(file: File): INTEGER;
34+
PROCEDURE Read(file: File): BYTE;
35+
PROCEDURE ReadChar(file: File): CHAR;
36+
PROCEDURE ReadInt(file: File): INTEGER;
37+
PROCEDURE ReadBytes(file: File; VAR b: ARRAY OF BYTE; VAR n: INTEGER);
38+
PROCEDURE ReadAsciiStr(file: File; VAR str: ARRAY OF CHAR);
39+
PROCEDURE ReadStr(file: File; VAR str: ARRAY OF CHAR): INTEGER;
4040

41-
PROCEDURE Status*(file: File): INTEGER;
42-
PROCEDURE Rename*(from, to: ARRAY OF CHAR): INTEGER;
43-
PROCEDURE Exists*(name: ARRAY OF CHAR): BOOLEAN;
44-
PROCEDURE Delete*(name: ARRAY OF CHAR): INTEGER;
45-
PROCEDURE Seek*(file: File; pos: INTEGER): INTEGER;
46-
PROCEDURE Size*(file: File): INTEGER;
41+
PROCEDURE Status(file: File): INTEGER;
42+
PROCEDURE Rename(from, to: ARRAY OF CHAR): INTEGER;
43+
PROCEDURE Exists(name: ARRAY OF CHAR): BOOLEAN;
44+
PROCEDURE Delete(name: ARRAY OF CHAR): INTEGER;
45+
PROCEDURE Seek(file: File; pos: INTEGER): INTEGER;
46+
PROCEDURE Size(file: File): INTEGER;
4747
END Files.

src/In.Mod

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@
1717
discarded.
1818
*)
1919
DEFINITION In;
20-
VAR Done*: BOOLEAN;
21-
PROCEDURE Char*(VAR ch: CHAR);
22-
PROCEDURE String*(VAR str: ARRAY OF CHAR);
23-
PROCEDURE Real*(VAR x: REAL);
24-
PROCEDURE Int*(VAR x: INTEGER);
20+
VAR Done: BOOLEAN;
21+
PROCEDURE Char(VAR ch: CHAR);
22+
PROCEDURE String(VAR str: ARRAY OF CHAR);
23+
PROCEDURE Real(VAR x: REAL);
24+
PROCEDURE Int(VAR x: INTEGER);
2525
END In.

src/Math.Mod

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
(*
2+
Copyright 2020 Luca Boasso. All rights reserved.
3+
Use of this source code is governed by a MIT
4+
license that can be found in the LICENSE file.
5+
*)
6+
7+
(* Math provides a basic set of general purpose mathematical functions using
8+
REAL arithmetic. It implements the interface described in "The Oakwood
9+
Guidelines for Oberon-2 Compiler Developers". *)
10+
DEFINITION Math;
11+
CONST
12+
pi = 3.14159265358979323846;
13+
e = 2.71828182845904523536;
14+
15+
(* sqrt returns the square root of x, where x must be positive *)
16+
PROCEDURE sqrt(x: REAL): REAL;
17+
18+
(* power returns base raised to the power of x. *)
19+
PROCEDURE power(x, base: REAL): REAL;
20+
21+
(* exp returns Math.e raised to the power of x: power(x, e)*)
22+
PROCEDURE exp(x: REAL): REAL;
23+
24+
(* ln returns the natural logarithm (base e) of x. *)
25+
PROCEDURE ln(x: REAL): REAL;
26+
27+
(* log returns the logarithm of x base b. All positive arguments are allowed.
28+
The base b must be positive.*)
29+
PROCEDURE log(x, b: REAL): REAL;
30+
31+
(* If the fraction part of x is in range 0.0 to 0.5 (excluded) then the result
32+
of round is the largest integer not greater than x, otherwise the result
33+
is x rounded up to the next highest whole number.
34+
Note that integer values cannot always be exactly represented in REAL
35+
format. *)
36+
PROCEDURE round(x: REAL): REAL;
37+
38+
(* sin returns the sine value of x, where x is in radians. *)
39+
PROCEDURE sin(x: REAL): REAL;
40+
41+
(* cos returns the cosine value of x, where x is in radians. *)
42+
PROCEDURE cos(x: REAL): REAL;
43+
44+
(* tan returns the tangent value of x, where x is in radians. *)
45+
PROCEDURE tan(x: REAL): REAL;
46+
47+
(* arcsin returns the arcsine value in radians of x, where x is
48+
in the sine value. *)
49+
PROCEDURE arcsin(x: REAL): REAL;
50+
51+
(* arcos returns the arcos value in radians of x, where x is
52+
in the cosine value. *)
53+
PROCEDURE arccos(x: REAL): REAL;
54+
55+
(* arctan returns the arctan value in radians of x, where x is
56+
in the tangent value. *)
57+
PROCEDURE arctan(x: REAL): REAL;
58+
59+
(* arctan2 returns the quadrant-correct arc tangent atan(x/y).
60+
If the denominator y is zero, then the numerator x must not be zero.
61+
All arguments are legal except x = y = 0. *)
62+
PROCEDURE arctan2(x, y: REAL): REAL;
63+
64+
(* sinh returns the hyperbolic sine of x. *)
65+
PROCEDURE sinh(x: REAL): REAL;
66+
67+
(* cosh returns the hyperbolic cosine of x. *)
68+
PROCEDURE cosh(x: REAL): REAL;
69+
70+
(* tanh returns the hyperbolic tangent of x. *)
71+
PROCEDURE tanh(x: REAL): REAL;
72+
73+
(* arcsinh returns the arc hyperbolic sine of x. *)
74+
PROCEDURE arcsinh(x: REAL): REAL;
75+
76+
(* arccosh returns the arc hyperbolic cosine of x. All arguments greater than
77+
or equal to 1 are legal. *)
78+
PROCEDURE arccosh(x: REAL): REAL;
79+
80+
(* arctanh returns the arc hyperbolic tangent of x. *)
81+
PROCEDURE arctanh(x: REAL): REAL;
82+
END Math.

src/Os.Mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
*)
66

77
DEFINITION Os;
8-
PROCEDURE GetEnv*(VAR out: ARRAY OF CHAR; name: ARRAY OF CHAR);
8+
PROCEDURE GetEnv(VAR out: ARRAY OF CHAR; name: ARRAY OF CHAR);
99

1010
(* Get time in seconds since 2010-01-01-UTC *)
11-
PROCEDURE CurrentTime*(): INTEGER;
12-
END Os.
11+
PROCEDURE CurrentTime(): INTEGER;
12+
END Os.

src/Out.Mod

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66

77
(* Simple procedures to print to standard output *)
88
DEFINITION Out;
9-
PROCEDURE Char*(ch: CHAR);
10-
PROCEDURE String*(str: ARRAY OF CHAR);
11-
PROCEDURE Real*(x: REAL; n: INTEGER);
12-
PROCEDURE Int*(x, n: INTEGER);
13-
PROCEDURE Ln*;
14-
PROCEDURE Hex*(x: INTEGER);
9+
PROCEDURE Char(ch: CHAR);
10+
PROCEDURE String(str: ARRAY OF CHAR);
11+
PROCEDURE Real(x: REAL; n: INTEGER);
12+
PROCEDURE Int(x, n: INTEGER);
13+
PROCEDURE Ln;
14+
PROCEDURE Hex(x: INTEGER);
1515
END Out.

src/java/Files.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
1313

14-
public class Files {
14+
public final class Files {
1515
public static final int OK = 0;
1616
public static final int EOF = -1;
1717
public static final int IOERROR = -2;

src/java/In.java

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public final class In {
1010

1111
static public boolean Done;
1212
static private Scanner scanner;
13+
14+
// Ensure non-instantiability
1315
private In() {}
1416

1517
static {

0 commit comments

Comments
 (0)