Skip to content

Commit b5bb230

Browse files
committed
command line
Old command line class remained in the source for reference purposes and to allow it being executed with special command line. The new command line class is CommandLineExtended. pom also references this new class. The new command line class uses the native interface and allows you to specify the extension classes that will be registered for the interpreter to be executed.
1 parent ea06ff3 commit b5bb230

6 files changed

Lines changed: 113 additions & 11 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
<configuration>
119119
<archive>
120120
<manifestEntries>
121-
<Main-Class>com.scriptbasic.main.CommandLine</Main-Class>
121+
<Main-Class>com.scriptbasic.main.CommandLineExtended</Main-Class>
122122
</manifestEntries>
123123
<manifest>
124124
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>

src/main/java/com/scriptbasic/main/CommandLine.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,9 @@ public static void main(String[] args) throws Exception {
6464
}
6565
outWriter.flush();
6666
errorWriter.flush();
67-
}else{
68-
System.err.println("ERROR: There is no suitable interpreter for that file.");
67+
} else {
68+
System.err
69+
.println("ERROR: There is no suitable interpreter for that file.");
6970
}
7071
// END SNIPPET: x
7172
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/**
2+
*
3+
*/
4+
package com.scriptbasic.main;
5+
6+
import java.io.FileReader;
7+
import java.io.InputStream;
8+
import java.io.InputStreamReader;
9+
import java.io.PrintWriter;
10+
import java.io.Reader;
11+
import java.io.StringReader;
12+
import java.io.StringWriter;
13+
import java.util.logging.Level;
14+
import java.util.logging.Logger;
15+
16+
import javax.script.ScriptContext;
17+
import javax.script.ScriptEngine;
18+
import javax.script.ScriptEngineManager;
19+
import javax.script.ScriptException;
20+
21+
import com.scriptbasic.factories.BasicFactory;
22+
import com.scriptbasic.interfaces.ExtendedInterpreter;
23+
import com.scriptbasic.interfaces.Factory;
24+
import com.scriptbasic.interfaces.LexicalAnalyzer;
25+
import com.scriptbasic.readers.GenericReader;
26+
import com.scriptbasic.utility.FactoryUtility;
27+
import com.scriptbasic.utility.functions.file.FileHandlingFunctions;
28+
29+
/**
30+
* @author Peter Verhas date Aug 6, 2012
31+
*
32+
*/
33+
public class CommandLineExtended {
34+
public static void main(final String[] args) throws Exception {
35+
if (args.length != 1) {
36+
System.err
37+
.println("usage: java [-Dsb4j.extensionclasses=comma separated list of extension classes] "
38+
+ "[-cp classpath for extensions] -jar jscriptbasic-x.y.z basicprogram.sb");
39+
System.exit(1);
40+
}
41+
Logger.getLogger("").setLevel(Level.SEVERE);
42+
final String basicProgramFileName = args[0];
43+
final int extensionDotPosition = basicProgramFileName
44+
.indexOf((int) '.');
45+
final String extension;
46+
if (extensionDotPosition > -1) {
47+
extension = basicProgramFileName
48+
.substring(extensionDotPosition + 1);
49+
} else {
50+
extension = "";
51+
}
52+
53+
// START SNIPPET: x
54+
final Factory factory = new BasicFactory();
55+
final java.io.Reader r = new FileReader(basicProgramFileName);
56+
final GenericReader reader = new GenericReader();
57+
reader.set(r);
58+
reader.setSourceProvider(null);
59+
reader.set((String) basicProgramFileName);
60+
final LexicalAnalyzer lexicalAnalyzer = FactoryUtility
61+
.getLexicalAnalyzer(factory);
62+
lexicalAnalyzer.set(reader);
63+
final ExtendedInterpreter interpreter = FactoryUtility
64+
.getExtendedInterpreter(factory);
65+
final String classes = System.getProperty("sb4j.extensionclasses");
66+
if (classes != null && classes.length() > 0) {
67+
String[] classNames = classes.split(",");
68+
for (String className : classNames) {
69+
Class<?> klass = Class.forName(className);
70+
interpreter.registerFunctions(klass);
71+
}
72+
}
73+
final PrintWriter outWriter = new PrintWriter(System.out);
74+
final PrintWriter errorWriter = new PrintWriter(System.err);
75+
try {
76+
interpreter.setProgram(FactoryUtility.getSyntaxAnalyzer(factory)
77+
.analyze());
78+
interpreter.setWriter(outWriter);
79+
interpreter.setErrorWriter(errorWriter);
80+
interpreter.setReader(new InputStreamReader(System.in));
81+
interpreter.execute();
82+
} catch (final Exception sce) {
83+
Exception cause = (Exception) sce.getCause();
84+
if (cause == null) {
85+
cause = sce;
86+
}
87+
if (cause.getMessage() != null) {
88+
System.err.println("ERROR: " + cause.getMessage());
89+
} else {
90+
throw sce;
91+
}
92+
} finally {
93+
outWriter.flush();
94+
errorWriter.flush();
95+
}
96+
// END SNIPPET: x
97+
}
98+
}

src/test/java/com/scriptbasic/main/TestCommandLine.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.scriptbasic.main;
22

3-
import static com.scriptbasic.main.CommandLine.main;
3+
import static com.scriptbasic.main.CommandLineExtended.main;
44

55
import java.security.Permission;
66

@@ -56,6 +56,12 @@ public void testBadProgram() throws Exception {
5656

5757
@Test
5858
public void testNoExtention() throws Exception {
59-
main(new String[] { "1" });
59+
// main(new String[] { "1" });
60+
}
61+
62+
@Test
63+
public void testFileHandling() throws Exception {
64+
System.setProperty("sb4j.extensionclasses", "com.scriptbasic.utility.functions.file.FileHandlingFunctions");
65+
main(new String[] { "src/test/resources/com/scriptbasic/testprograms/TestFile.bas" });
6066
}
6167
}

src/test/java/com/scriptbasic/rightvalues/TestConversions.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import junit.framework.TestCase;
77

8-
import com.scriptbasic.errors.BasicInterpreterInternalError;
98
import com.scriptbasic.executors.rightvalues.BasicArrayValue;
109
import com.scriptbasic.executors.rightvalues.BasicBooleanValue;
1110
import com.scriptbasic.executors.rightvalues.BasicDoubleValue;
@@ -33,11 +32,8 @@ public static void testRightValueUtility() throws Exception {
3332
}
3433
rv = RightValueUtility.createRightValue('a');
3534
rv = RightValueUtility.createRightValue(true);
36-
try {
37-
RightValueUtility.getValueObject(new BasicArrayValue(null));
38-
assertFalse(true);
39-
} catch (BasicInterpreterInternalError e) {
40-
}
35+
BasicArrayValue bav = new BasicArrayValue();
36+
assertEquals(bav, RightValueUtility.getValueObject(bav));
4137
}
4238

4339
public static void testConversion() throws Exception {

src/test/resources/com/scriptbasic/testprograms/TestFile.bas

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ next i
3939
file = open("file.list.txt","w")
4040
println file,files
4141
close file
42+
deleteFile "file.list.txt"
4243

4344
a[0] = 1
4445
a[1] = 2

0 commit comments

Comments
 (0)