From fd7a059b446269a5845a7d0ef83ee9cd8f600322 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Anian=20B=C3=BChler?=
 <anian.buehler@reutlingen-university.de>
Date: Wed, 2 Feb 2022 13:52:09 +0100
Subject: [PATCH] added memsetBlock, memcpyBlock & strcpyBlock

---
 .../translator/block/arrays/MemcpyBlock.java  | 49 +++++++++++++++++++
 .../translator/block/arrays/MemsetBlock.java  | 48 ++++++++++++++++++
 .../block/arrays/SetterCharArrayBlock.java    |  2 +-
 .../translator/block/arrays/StrcpyBlock.java  | 47 ++++++++++++++++++
 4 files changed, 145 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java
 create mode 100644 src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java
 create mode 100644 src/main/java/com/ardublock/translator/block/arrays/StrcpyBlock.java

diff --git a/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java b/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java
new file mode 100644
index 0000000..9ad590d
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java
@@ -0,0 +1,49 @@
+package com.ardublock.translator.block.arrays;
+
+
+import java.util.ResourceBundle;
+
+import com.ardublock.translator.Translator;
+import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
+import com.ardublock.translator.block.exception.SocketNullException;
+import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantStringBlock;
+import com.ardublock.translator.block.numbers.LocalVariableStringBlock;
+import com.ardublock.translator.block.numbers.VariableStringBlock;
+
+public class MemcpyBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public MemcpyBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		TranslatorBlock tb_destination = this.getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_source	   = this.getRequiredTranslatorBlockAtSocket(1);
+		TranslatorBlock tb_length	   = this.getRequiredTranslatorBlockAtSocket(2);
+
+		String destinationArray = tb_destination.toCode();
+		String sourceArray      = tb_source.toCode();
+		String lengthOfData      = tb_length.toCode();
+
+
+		if (!(tb_destination instanceof VariableStringBlock) && !(tb_destination instanceof LocalVariableStringBlock)  && !(tb_destination instanceof ConstantStringBlock) 
+			&& !(tb_source instanceof VariableStringBlock) && !(tb_source instanceof LocalVariableStringBlock)  && !(tb_source instanceof ConstantStringBlock)) {
+		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot"));
+		    }
+		
+		String ret = "memcpy("+destinationArray+", " + sourceArray + ", "+lengthOfData+")";
+
+		return ret;
+	}
+
+}
+
+
+
diff --git a/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java b/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java
new file mode 100644
index 0000000..715e8ac
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java
@@ -0,0 +1,48 @@
+package com.ardublock.translator.block.arrays;
+
+
+import java.util.ResourceBundle;
+
+import com.ardublock.translator.Translator;
+import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
+import com.ardublock.translator.block.exception.SocketNullException;
+import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantStringBlock;
+import com.ardublock.translator.block.numbers.LocalVariableStringBlock;
+import com.ardublock.translator.block.numbers.VariableStringBlock;
+
+public class MemsetBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public MemsetBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		TranslatorBlock tb_destination = this.getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_insert	   = this.getRequiredTranslatorBlockAtSocket(1);
+		TranslatorBlock tb_length	   = this.getRequiredTranslatorBlockAtSocket(2);
+
+		String destinationArray   = tb_destination.toCode();
+		String insertChar         = tb_insert.toCode();
+		String numOfReplacedChars = tb_length.toCode();
+
+
+		if (!(tb_destination instanceof VariableStringBlock) && !(tb_destination instanceof LocalVariableStringBlock)  && !(tb_destination instanceof ConstantStringBlock)) {
+		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot"));
+		    }
+		
+		String ret = "memset("+destinationArray+", " + insertChar + ", "+numOfReplacedChars+")";
+
+		return ret;
+	}
+
+}
+
+
+
diff --git a/src/main/java/com/ardublock/translator/block/arrays/SetterCharArrayBlock.java b/src/main/java/com/ardublock/translator/block/arrays/SetterCharArrayBlock.java
index 7a95747..d6bc674 100644
--- a/src/main/java/com/ardublock/translator/block/arrays/SetterCharArrayBlock.java
+++ b/src/main/java/com/ardublock/translator/block/arrays/SetterCharArrayBlock.java
@@ -33,7 +33,7 @@ public class SetterCharArrayBlock extends TranslatorBlock
 		String value        = tb_Value.toCode();
 		
 		if (!(tb_Name instanceof VariableStringBlock) && !(tb_Name instanceof LocalVariableStringBlock)  && !(tb_Name instanceof ConstantStringBlock)) {
-		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.number_var_slot"));
+		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot"));
 		    }
 		/*	if (!(tb_Pos instanceof VariableNumberBlock) && !(tb_Pos instanceof LocalVariableNumberBlock) && !(tb_Pos instanceof NumberBlock)) {
 		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.number_var_slot"));
diff --git a/src/main/java/com/ardublock/translator/block/arrays/StrcpyBlock.java b/src/main/java/com/ardublock/translator/block/arrays/StrcpyBlock.java
new file mode 100644
index 0000000..d233fbe
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/arrays/StrcpyBlock.java
@@ -0,0 +1,47 @@
+package com.ardublock.translator.block.arrays;
+
+
+import java.util.ResourceBundle;
+
+import com.ardublock.translator.Translator;
+import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
+import com.ardublock.translator.block.exception.SocketNullException;
+import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.ConstantStringBlock;
+import com.ardublock.translator.block.numbers.LocalVariableStringBlock;
+import com.ardublock.translator.block.numbers.VariableStringBlock;
+
+public class StrcpyBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public StrcpyBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		TranslatorBlock tb_destination = this.getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_source	   = this.getRequiredTranslatorBlockAtSocket(1);
+
+		String destinationArray = tb_destination.toCode();
+		String sourceArray      = tb_source.toCode();
+
+
+		if (!(tb_destination instanceof VariableStringBlock) && !(tb_destination instanceof LocalVariableStringBlock)  && !(tb_destination instanceof ConstantStringBlock) 
+			&& !(tb_source instanceof VariableStringBlock) && !(tb_source instanceof LocalVariableStringBlock)  && !(tb_source instanceof ConstantStringBlock)) {
+		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot"));
+		    }
+
+		String ret = "strcpy("+destinationArray+", " + sourceArray + ")";
+
+		return ret;
+	}
+
+}
+
+
+
-- 
GitLab