diff --git a/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java index 572cc511b84324b36304a93d422deec6debad28b..e9ce71a15dc5aeead91d5e34db6656d3d3f04b70 100644 --- a/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java +++ b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java @@ -8,11 +8,8 @@ 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.NumberBlock; import com.ardublock.translator.block.numbers.StringBlock; -import com.ardublock.translator.block.numbers.VariableStringBlock; public class ArrayReferenceBlock extends TranslatorBlock { diff --git a/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java b/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java index 5b7f8bc7093ad0d77ba5b0f9400eb4a5960ae8f4..b682a03cf2c3378bcb17bed7546c051b0f28b3ad 100644 --- a/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java +++ b/src/main/java/com/ardublock/translator/block/arrays/MemcpyBlock.java @@ -10,6 +10,8 @@ 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.NumberBlock; +import com.ardublock.translator.block.numbers.StringBlock; import com.ardublock.translator.block.numbers.VariableStringBlock; public class MemcpyBlock extends TranslatorBlock @@ -33,8 +35,7 @@ public class MemcpyBlock extends TranslatorBlock 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)) { + if ((tb_destination instanceof StringBlock) || (tb_destination instanceof NumberBlock) || (tb_source instanceof StringBlock) || (tb_source instanceof NumberBlock) ) { throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.string_var_slot")); } diff --git a/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java b/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java index a2b5217ea2debbd38bfbf7a10a4e93885e935e6f..b4be7f91452304eae07a311021ec23f66764d4a9 100644 --- a/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java +++ b/src/main/java/com/ardublock/translator/block/arrays/MemsetBlock.java @@ -10,6 +10,8 @@ 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.NumberBlock; +import com.ardublock.translator.block.numbers.StringBlock; import com.ardublock.translator.block.numbers.VariableStringBlock; public class MemsetBlock extends TranslatorBlock @@ -33,8 +35,8 @@ public class MemsetBlock extends TranslatorBlock 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")); + if ((tb_destination instanceof StringBlock) || (tb_destination instanceof NumberBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg. var_slot")); } String ret = "memset("+destinationArray+", " + insertChar + ", "+numOfReplacedChars+");"; diff --git a/src/main/java/com/ardublock/translator/block/arrays/SizeOfArrayBlock.java b/src/main/java/com/ardublock/translator/block/arrays/SizeOfArrayBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..e929d74ed065ae7c61b183b8e20c8750f338671c --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/arrays/SizeOfArrayBlock.java @@ -0,0 +1,41 @@ +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.NumberBlock; +import com.ardublock.translator.block.numbers.StringBlock; + +public class SizeOfArrayBlock extends TranslatorBlock +{ + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); + + public SizeOfArrayBlock(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_name = this.getRequiredTranslatorBlockAtSocket(0); + + String arrayName = tb_name.toCode(); + + + if ((tb_name instanceof StringBlock) || (tb_name instanceof NumberBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.var_slot")); + } + + return "(sizeOf("+arrayName+")/sizeOf(" + arrayName + "[0]))"; + } + +} + + + diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index 41f440ba529e806010f79812d7fe8dbd80711cb8..08ed6f4c086ed1b175a4058063a6f805f957ba7a 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -687,12 +687,7 @@ bg.create_variable_analog=create analog variable bg.create_variable_analog.description= bg.create_array_analog=set analog array bg.create_array_analog.description= -bg.memcpy_string=memcpy -bg.memcpy_string.description=copy a block of memory from a location to another -bg.memset_string=memset -bg.memset_string.description=copies a single character for a specified number of times to an object -bg.strcpy_string=strcpy -bg.strcpy_string.description=copy one string to another + #ARRAYS #**************************** @@ -722,11 +717,29 @@ bg.create_number_long_array.description=Create an array of long bg.create_number_float_array.description=Create an array of float bg.setter_number_array.description=Set the value of an array member +bg.memcpy_number=memcpy +bg.memcpy_number.description=copy a block of memory from a location (source) to another (destination) +bg.memset_number=memset +bg.memset_number.description=copies a single character for a specified number of times to an object +bg.memcpy_string=memcpy +bg.memcpy_string.description=copy a block of memory from a location (source) to another (destination) +bg.memset_string=memset +bg.memset_string.description=copies a single character for a specified number of times to an object +bg.strcpy_string=strcpy +bg.strcpy_string.description=copy one string (source) to another (destination) +bg.sizeof_number=sizeOf +bg.sizeof_number.description=returns length of array +bg.sizeof_string=sizeOf +bg.sizeof_string.description=returns length of array + bc.string=char array bc.position=position bc.array=Name the array bc.vecsize=size -bc.number_chars=number of characters +bc.count_chars=count of characters +bc.count=count +bc.dest=destination +bc.source=source #COMMUNICATION #**************************** diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index 6b92bb4b04bff02016639c9932beeeeaf64742f0..0b4cf3f4a31f1f98b93fc402dacd793e0d25b33d 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -2091,10 +2091,9 @@ <text>set char array</text> </description> <BlockConnectors> - <BlockConnector connector-type="string" connector-kind="socket" label="bc.array"> - <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.string"> </BlockConnector> - <BlockConnector connector-type="number" connector-kind="socket" label="bc.number_chars"> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.count_chars"> </BlockConnector> <BlockConnector connector-type="string" connector-kind="socket" label="bc.value"> </BlockConnector> @@ -2217,22 +2216,52 @@ </BlockConnectors> </BlockGenus> - <BlockGenus name="memcpy_string" kind="command" color="200 0 0" initlabel="memcpy_string"> + <BlockGenus name="memcpy_number" kind="command" color="200 0 0" initlabel="bg.memcpy_number"> <description> <text>memcpy</text> </description> <BlockConnectors> - <BlockConnector connector-type="string" connector-kind="socket" label="bc.array"> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.dest"> + <DefaultArg genus-name="variable_number" label="Name_der_Tabelle" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.source"> + <DefaultArg genus-name="variable_number" label="Name_der_Tabelle2" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.vecsize"> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="memset_number" kind="command" color="200 0 0" initlabel="bg.memset_number"> + <description> + <text>memset</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.array"> + <DefaultArg genus-name="variable_number" label="Name_der_Zeichenkette" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.value"> + <DefaultArg genus-name="number" label="1" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.vecsize"> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="memcpy_string" kind="command" color="200 0 0" initlabel="bg.memcpy_string"> + <description> + <text>memcpy</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.dest"> <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> </BlockConnector> - <BlockConnector connector-type="string" connector-kind="socket" label="bc.array"> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.source"> <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette2" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.vecsize"> </BlockConnector> </BlockConnectors> </BlockGenus> - <BlockGenus name="memset_string" kind="command" color="200 0 0" initlabel="memset_string"> + <BlockGenus name="memset_string" kind="command" color="200 0 0" initlabel="bg.memset_string"> <description> <text>memset</text> </description> @@ -2241,21 +2270,21 @@ <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> </BlockConnector> <BlockConnector connector-type="string-list" connector-kind="socket" label="bc.char"> - <DefaultArg genus-name="variable_char" label="X" /> + <DefaultArg genus-name="char" label="X" /> </BlockConnector> <BlockConnector connector-type="number" connector-kind="socket" label="bc.vecsize"> </BlockConnector> </BlockConnectors> </BlockGenus> - <BlockGenus name="strcpy_string" kind="command" color="200 0 0" initlabel="strcpy_string"> + <BlockGenus name="strcpy_string" kind="command" color="200 0 0" initlabel="bg.strcpy_string"> <description> <text>strcpy</text> </description> <BlockConnectors> - <BlockConnector connector-type="string" connector-kind="socket" label="bc.array"> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.dest"> <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> </BlockConnector> - <BlockConnector connector-type="string" connector-kind="socket" label="bc.array"> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.source"> <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette2" /> </BlockConnector> </BlockConnectors> @@ -2269,7 +2298,7 @@ <BlockConnector connector-type="string" connector-kind="socket" label="bc.string"> <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> </BlockConnector> - <BlockConnector connector-type="number" connector-kind="socket" label="offset"> + <BlockConnector connector-type="number" connector-kind="socket" label="Offset"> <DefaultArg genus-name="number" label="0" /> </BlockConnector> </BlockConnectors> @@ -2280,14 +2309,36 @@ </description> <BlockConnectors> <BlockConnector connector-type="number" connector-kind="plug" /> - <BlockConnector connector-type="number" connector-kind="socket" label="bc.string"> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.array"> <DefaultArg genus-name="variable_number" label="Name_der_Tabelle" /> </BlockConnector> - <BlockConnector connector-type="number" connector-kind="socket" label="offset"> + <BlockConnector connector-type="number" connector-kind="socket" label="Offset"> <DefaultArg genus-name="number" label="0" /> </BlockConnector> </BlockConnectors> </BlockGenus> + <BlockGenus name="sizeof_string" kind="data" color="200 0 0" initlabel="bg.sizeof_string"> + <description> + <text>size of array</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="number" connector-kind="plug" /> + <BlockConnector connector-type="string" connector-kind="socket" label="bc.string"> + <DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" /> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="sizeof_number" kind="data" color="200 0 0" initlabel="bg.sizeof_number"> + <description> + <text>size of array</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="number" connector-kind="plug" /> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.array"> + <DefaultArg genus-name="variable_number" label="Name_der_Tabelle" /> + </BlockConnector> + </BlockConnectors> + </BlockGenus> <!-- ******************** Communication *************** --> @@ -3476,11 +3527,16 @@ <BlockGenusMember>read_char_array</BlockGenusMember> <BlockGenusMember>arrayDivider3</BlockGenusMember> + <BlockGenusMember>memcpy_number</BlockGenusMember> + <BlockGenusMember>memset_number</BlockGenusMember> <BlockGenusMember>memcpy_string</BlockGenusMember> <BlockGenusMember>memset_string</BlockGenusMember> <BlockGenusMember>strcpy_string</BlockGenusMember> <BlockGenusMember>reference_string</BlockGenusMember> <BlockGenusMember>reference_number</BlockGenusMember> + <BlockGenusMember>sizeof_string</BlockGenusMember> + <BlockGenusMember>sizeof_number</BlockGenusMember> + </BlockDrawer> <BlockDrawer button-color="165 42 42" name="bd.communication" type="default"> diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties index 02ef6e920af06e87141648c6d58e59b4c9166163..23221e076e615fb2777a980586bf823632a45db3 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -714,22 +714,33 @@ bg.create_number_float_array.description=Erzeuge ein Array f bg.setter_number_array.description=Setze den Wert eines Array-Feldes bg.read_number_array.description=Lese den Wert eines\nTabellen-Feldes -bg.memcpy_string=kopiere Tabelle -bg.memcpy_string.description=copy a block of memory from a location to another -bg.memset_string=setze Wert in Tabelle -bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle +bg.memcpy_number=kopiere Tabelle +bg.memcpy_number.description=kopiere einen Speicherbereich von einem Ort (Quelle) in einen anderen (Ziel).\nACHTUNG: Laenge in Bytes angeben +bg.memset_number=ersetze Werte in Tabelle +bg.memset_number.description=ersetze eine bestimmte Anzahl Werte in einer Tabelle +bg.memcpy_string=kopiere Zeichenkette (Teil) +bg.memcpy_string.description=kopiere einen Speicherbereich von einem Ort (Quelle) in einen anderen (Ziel) +bg.memset_string=ersetze Werte in Zeichenkette +bg.memset_string.description=ersetze eine bestimmte Anzahl Zeichen durch ein anderes bg.strcpy_string=kopiere Zeichenkette -bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere +bg.strcpy_string.description=kopiere eine Zeichenkette (Quelle) in eine andere (Ziel) bg.reference_string=Start der Zeichenkette verschieben bg.reference_string.description=Verschiebt die Startposition ab der die Zeichenkette verwendet wird bg.reference_number=Start der Tabelle verschieben bg.reference_number.description=Verschiebt die Startposition ab der die Tabelle verwendet wird +bg.sizeof_number=Anzahl Werte +bg.sizeof_number.description=Gibt Anzahl der verfuegbaren Stellen der Tabelle zurueck +bg.sizeof_string=Anzahl Werte +bg.sizeof_string.description=Gibt Anzahl der verfuegbaren Stellen der Zeichenkette zurueck bc.string=Zeichenkette bc.position=Stelle bc.array=Tabellen-Name bc.vecsize=Anzahl Werte -bc.number_chars=Anzahl Zeichen +bc.count_chars=Anzahl Zeichen +bc.count=Anzahl +bc.dest=Ziel +bc.source=Quelle #COMMUNICATION #**************************** diff --git a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties index 381420d3004f3708d27d68bf5f2d82348defb1bc..77d90d84fec9ac2e7d33910a44e7b49333a8c6ea 100644 --- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties +++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties @@ -713,22 +713,33 @@ bg.create_number_float_array.description=Erzeuge ein Array f bg.setter_number_array.description=Setze den Wert eines Array-Feldes bg.read_number_array.description=Lese den Wert eines Array-Feldes +bg.memcpy_number=memcpy +bg.memcpy_number.description=kopiere einen Speicherbereich von einem Ort (Quelle) in einen anderen (Ziel).\nACHTUNG: Laenge in Bytes angeben +bg.memset_number=memset +bg.memset_number.description=ersetze eine bestimmte Anzahl Werte in einer Tabelle bg.memcpy_string=memcpy -bg.memcpy_string.description=copy a block of memory from a location to another +bg.memcpy_string.description=kopiere einen Speicherbereich von einem Ort (Quelle) in einen anderen (Ziel) bg.memset_string=memset -bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle +bg.memset_string.description=ersetze eine bestimmte Anzahl Zeichen durch ein anderes bg.strcpy_string=strcpy -bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere +bg.strcpy_string.description=kopiere eine Zeichenkette (Quelle) in eine andere (Ziel) bg.reference_string=Referenz erzeugen bg.reference_string.description=Verschiebt die Startposition ab der das char-Array verwendet wird bg.reference_number=Referenz erzeugen bg.reference_number.description=Verschiebt die Startposition ab der das Array verwendet wird +bg.sizeof_number=sizeOf +bg.sizeof_number.description=Gibt Anzahl der verfuegbaren Stellen der Tabelle zurueck +bg.sizeof_string=sizeOf +bg.sizeof_string.description=Gibt Anzahl der verfuegbaren Stellen der Zeichenkette zurueck bc.string=char-Array bc.position=Stelle bc.array=Array-Name bc.vecsize=Anzahl Werte -bc.number_chars=Anzahl Zeichen +bc.count_chars=Anzahl Zeichen +bc.count=Anzahl +bc.dest=Ziel +bc.source=Quelle #COMMUNICATION #**************************** diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties index 898a55759ff4784c7543cfa185b24b11b836d181..f8eb0ab099061fbd2e40b588d8ebaba7aa1bf2c9 100644 --- a/src/main/resources/com/ardublock/block/block-mapping.properties +++ b/src/main/resources/com/ardublock/block/block-mapping.properties @@ -240,9 +240,13 @@ setter_char_array=com.ardublock.translator.block.arrays.SetterCharArrayBlock memcpy_string=com.ardublock.translator.block.arrays.MemcpyBlock memset_string=com.ardublock.translator.block.arrays.MemsetBlock +memcpy_number=com.ardublock.translator.block.arrays.MemcpyBlock +memset_number=com.ardublock.translator.block.arrays.MemsetBlock strcpy_string=com.ardublock.translator.block.arrays.StrcpyBlock reference_string=com.ardublock.translator.block.arrays.ArrayReferenceBlock reference_number=com.ardublock.translator.block.arrays.ArrayReferenceBlock +sizeof_string=com.ardublock.translator.block.arrays.SizeOfArrayBlock +sizeof_number=com.ardublock.translator.block.arrays.SizeOfArrayBlock #COMMUNICATION #****************************