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