Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 0 additions & 19 deletions examples/Test.nsl

This file was deleted.

32 changes: 26 additions & 6 deletions src/nsl/instruction/StrCpyInstruction.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/
public class StrCpyInstruction extends AssembleExpression {
public static final String name = "StrCpy";
protected final String instructionName;
private final Expression string;
private final Expression maxLen;
private final Expression startOffset;
Expand All @@ -25,14 +26,25 @@ public class StrCpyInstruction extends AssembleExpression {
* @param returns the number of values to return
*/
public StrCpyInstruction(int returns) {
this(returns, name);
}

/**
* Class constructor for subclasses with different instruction names.
*
* @param returns the number of values to return
* @param instructionName the name of the instruction (e.g., "StrCpy" or "UnsafeStrCpy")
*/
protected StrCpyInstruction(int returns, String instructionName) {
this.instructionName = instructionName;
if (PageExInfo.in())
throw new NslContextException(
EnumSet.of(NslContext.Section, NslContext.Function, NslContext.Global), name);
if (returns != 11) throw new NslReturnValueException(name, 1);
EnumSet.of(NslContext.Section, NslContext.Function, NslContext.Global), instructionName);
if (returns != 1) throw new NslReturnValueException(instructionName, 1);

ArrayList<Expression> paramsList = Expression.matchList();
int paramsCount = paramsList.size();
if (paramsCount < 1 || paramsCount > 3) throw new NslArgumentException(name, 1, 3);
if (paramsCount < 1 || paramsCount > 3) throw new NslArgumentException(instructionName, 1, 3);

this.string = paramsList.get(0);

Expand Down Expand Up @@ -73,14 +85,22 @@ public void assemble(Register var) throws IOException {
if (this.startOffset != null) {
Expression varOrStartOffset = AssembleExpression.getRegisterOrExpression(this.startOffset);
ScriptParser.writeLine(
name + " " + var + " " + varOrString + " " + varOrMaxLen + " " + varOrStartOffset);
instructionName
+ " "
+ var
+ " "
+ varOrString
+ " "
+ varOrMaxLen
+ " "
+ varOrStartOffset);
varOrStartOffset.setInUse(false);
} else {
ScriptParser.writeLine(name + " " + var + " " + varOrString + " " + varOrMaxLen);
ScriptParser.writeLine(instructionName + " " + var + " " + varOrString + " " + varOrMaxLen);
}
varOrMaxLen.setInUse(false);
} else {
ScriptParser.writeLine(name + " " + var + " " + varOrString);
ScriptParser.writeLine(instructionName + " " + var + " " + varOrString);
}
varOrString.setInUse(false);
}
Expand Down
21 changes: 21 additions & 0 deletions src/nsl/instruction/UnsafeStrCpyInstruction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*
* UnsafeStrCpyInstruction.java
*/

package nsl.instruction;

/**
* @author Jan
*/
public class UnsafeStrCpyInstruction extends StrCpyInstruction {
public static final String name = "UnsafeStrCpy";

/**
* Class constructor.
*
* @param returns the number of values to return
*/
public UnsafeStrCpyInstruction(int returns) {
super(returns, name);
}
}
2 changes: 2 additions & 0 deletions src/nsl/statement/Statement.java
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,8 @@ public static AssembleExpression matchInstruction(int returns) {
return new UninstallTextInstruction(returns);
if (ScriptParser.tokenizer.match(UnRegDLLInstruction.name))
return new UnRegDLLInstruction(returns);
if (ScriptParser.tokenizer.match(UnsafeStrCpyInstruction.name))
return new UnsafeStrCpyInstruction(returns);
if (ScriptParser.tokenizer.match(VIAddVersionKeyInstruction.name))
return new VIAddVersionKeyInstruction(returns);
if (ScriptParser.tokenizer.match(VIProductVersionInstruction.name))
Expand Down