diff --git a/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..572cc511b84324b36304a93d422deec6debad28b --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.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.NumberBlock; +import com.ardublock.translator.block.numbers.StringBlock; +import com.ardublock.translator.block.numbers.VariableStringBlock; + +public class ArrayReferenceBlock extends TranslatorBlock +{ + private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock"); + + public ArrayReferenceBlock(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); + TranslatorBlock tb_offset = this.getRequiredTranslatorBlockAtSocket(1); + + String arrayName = tb_name.toCode(); + String referenceOffset = tb_offset.toCode(); + + + if ((tb_name instanceof StringBlock) || (tb_name instanceof NumberBlock)) { + throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.var_slot")); + } + + String ret = "&"+arrayName+"[" + referenceOffset + "]"; + + return ret; + } + +} + + + diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties index b1364cb0600d0eac8016d07f32304ee3da7345bf..41f440ba529e806010f79812d7fe8dbd80711cb8 100644 --- a/src/main/resources/com/ardublock/block/ardublock.properties +++ b/src/main/resources/com/ardublock/block/ardublock.properties @@ -106,6 +106,7 @@ ardublock.error_msg.char_var_slot=Char variable slot must take a char variable n ardublock.error_msg.array_var_slot='Array variable' slot must take an 'array variable' name.\nHint: Look at the 'variable' socket on the highlighted block ardublock.error_msg.array_size_slot='Array size' slot must take a standard integer constant ardublock.error_msg.string_var_slot=String variable slot must take a String variable name.\nHint: Look at the 'variable' socket on the highlighted block +ardublock.error_msg.var_slot= The slot must take an variable-block ardublock.error_msg.string_slot=String slot must take a String variable or a String variable name.\nHint: Look at the 'variable' socket on the highlighted block ardublock.error_msg.Digital_pin_slot=Pin# must be a valid digital pin number found on an Arduino Board ardublock.error_msg.Analog_pin_slot=Pin# must be a valid analog input pin number found on an Arduino Board diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml index 979ca2c9c0bfc97ffe1404ca3d19511c4055e0f4..6b92bb4b04bff02016639c9932beeeeaf64742f0 100644 --- a/src/main/resources/com/ardublock/block/ardublock.xml +++ b/src/main/resources/com/ardublock/block/ardublock.xml @@ -2260,6 +2260,35 @@ </BlockConnector> </BlockConnectors> </BlockGenus> + <BlockGenus name="reference_string" kind="data" color="200 0 0" initlabel="bg.reference_string"> + <description> + <text>reference_string</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="string" connector-kind="plug" /> + <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"> + <DefaultArg genus-name="number" label="0" /> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <BlockGenus name="reference_number" kind="data" color="200 0 0" initlabel="bg.reference_number"> + <description> + <text>reference_number</text> + </description> + <BlockConnectors> + <BlockConnector connector-type="number" connector-kind="plug" /> + <BlockConnector connector-type="number" connector-kind="socket" label="bc.string"> + <DefaultArg genus-name="variable_number" label="Name_der_Tabelle" /> + </BlockConnector> + <BlockConnector connector-type="number" connector-kind="socket" label="offset"> + <DefaultArg genus-name="number" label="0" /> + </BlockConnector> + </BlockConnectors> + </BlockGenus> + <!-- ******************** Communication *************** --> <BlockGenus name="communicationDivider1" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider1" color="150 150 150" /> @@ -3450,6 +3479,8 @@ <BlockGenusMember>memcpy_string</BlockGenusMember> <BlockGenusMember>memset_string</BlockGenusMember> <BlockGenusMember>strcpy_string</BlockGenusMember> + <BlockGenusMember>reference_string</BlockGenusMember> + <BlockGenusMember>reference_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 ae404af96eb9d4691ac4536c23540f2824f1613f..02ef6e920af06e87141648c6d58e59b4c9166163 100644 --- a/src/main/resources/com/ardublock/block/ardublock_de.properties +++ b/src/main/resources/com/ardublock/block/ardublock_de.properties @@ -109,6 +109,7 @@ ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel ben ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! +ardublock.error_msg.var_slot= Der Slot benötigt einen 'Variable'-Block ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Es ist nur ein Rueckgabeparameter pro Unterprogramm erlaubt! @@ -719,6 +720,10 @@ bg.memset_string=setze Wert in Tabelle bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle bg.strcpy_string=kopiere Zeichenkette bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere +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 bc.string=Zeichenkette bc.position=Stelle 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 58c032b12d494bc7288ca84ec57e22cd4443beb2..381420d3004f3708d27d68bf5f2d82348defb1bc 100644 --- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties +++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties @@ -109,6 +109,7 @@ ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel ben ardublock.error_msg.number_const_write= ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! +ardublock.error_msg.var_slot= Der Slot benötigt einen 'Variable'-Block ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block! ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block! @@ -718,6 +719,10 @@ bg.memset_string=memset bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle bg.strcpy_string=strcpy bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere +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 bc.string=char-Array bc.position=Stelle diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties index cf5ef858ed6aa667fb7054c14e8d6f8b28bb0536..898a55759ff4784c7543cfa185b24b11b836d181 100644 --- a/src/main/resources/com/ardublock/block/block-mapping.properties +++ b/src/main/resources/com/ardublock/block/block-mapping.properties @@ -241,6 +241,8 @@ 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 strcpy_string=com.ardublock.translator.block.arrays.StrcpyBlock +reference_string=com.ardublock.translator.block.arrays.ArrayReferenceBlock +reference_number=com.ardublock.translator.block.arrays.ArrayReferenceBlock #COMMUNICATION #****************************