[Tasker Tips & Tricks] CrashOverride93:
Hi everyone,

I started a new project to translate, originally, from Alpha to Morse code. But now I added some features to it, and I have thought that I had to share it here to everyone, and contribute to improve it ;)

Note

: Because the extract it's a bit long, I will continue with the explanation in the comment that follows.

-PROFILES-

Profile: MT - Notification
Event: Notification Click [ Owner Application:Tasker Title:Morse Translator ]
Enter: MT - Stop

-TASKS-

· Start. . .

MT - Start
<-> STEP 1>
A1: Anchor
<Message>
A2: Variable Set [ Name:%temp1 To:sos Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<Translation>
A3: Variable Set [ Name:%temp2 To:A-M Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<Encryption>
A4: Variable Set [ Name:%temp3 To:0 Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<Interpretation>
A5: Variable Set [ Name:%temp4 To:V Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<Clipboard>
A6: Variable Set [ Name:%temp5 To:1 Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<-> STEP 2>
A7: Anchor
A8: Perform Task [ Name:MT - Translator Priority:%priority Parameter 1 (%par1):%temp1 Parameter 2 (%par2):%temp2.%temp3.%temp4.%temp5 Return Value Variable: Stop:eek:ff ]

· Stop...

MT - Stop
A1: Stop [ With Error:eek:n Task:MT - Translator ]
A2: Shut Up
A3: Java Function [ Return:(Vibrator) temp Class Or Object:CONTEXT Function:getSystemService
{Object} (String) Param:vibrator Param: Param: Param: Param: Param: Param: ]
A4: Java Function [ Return: Class Or Object:temp Function:cancel
{} () Param:%tempd Param:-1 Param: Param: Param: Param: Param: Continue Task After Error:eek:n ]
A5: Torch [ Set:eek:ff ]
A6: Notify Cancel [ Title:Morse Translator Warn Not Exist:eek:ff ]
A7: Profile Status [ Name:MT - Notification Set:eek:ff ]

· Translator...

MT - Translator
A1: Profile Status [ Name:MT - Notification Set:eek:n ]
A2: Notify [ Title:Morse Translator Text:Processing... Icon:mw_editor_linear_scale Number:0 Permanent:eek:n Priority:5 ]
A3: Variable Split [ Name:%par2 Splitter:. Delete Base:eek:ff ]
<Alphabet>
A4: Array Set [ Variable Array:%temp1a Values:a|b|c|d|e|f|g|h|i|j|k|l|m|n|ñ|o|p|q|r|s|t|u|v|w|x|y|z| Splitter:| ]
A5: Array Set [ Variable Array:%temp1b Values:.-|-...|-.-.|-..|.|..-.|--.|....|..|.---|-.-|.-..|--|-.|--.--|---|.--.|--.-|.-.|...|-|..-|...-|.--|-..-|-.--|--..| Splitter:| ]
<Numbers>
A6: Array Set [ Variable Array:%temp2a Values:1|2|3|4|5|6|7|8|9|0| Splitter:| ]
A7: Array Set [ Variable Array:%temp2b Values:.----|..---|...--|....-|.....|-....|--...|---..|----.|-----| Splitter:| ]
<Punctuation>
A8: Array Set [ Variable Array:%temp3a Values:.|,|;|:|?|!|-|_|/|'|"|(|)|@|&|=|+|$| | Splitter:| ]
A9: Array Set [ Variable Array:%temp3b Values:.-.-.-|--..--|-.-.-.|---...|..--..|-.-.--|-....-|..--.-|-..-.|.----.|.-..-.|-.--.|-.--.-|.--.-.|.-...|-...-|.-.-.|...-..-| | Splitter:| ]
<Alphabet + Numbers + Punctuation>
A10: Array Set [ Variable Array:%temp4a Values:a|b|c|d|e|f|g|h|i|j|k|l|m|n|ñ|o|p|q|r|s|t|u|v|w|x|y|z|1|2|3|4|5|6|7|8|9|0|.|,|;|:|?|!|-|_|/|'|"|(|)|@|&|=|+|$|^| Splitter:| ]
A11: Array Set [ Variable Array:%temp4b Values:.-|-...|-.-.|-..|.|..-.|--.|....|..|.---|-.-|.-..|--|-.|--.--|---|.--.|--.-|.-.|...|-|..-|...-|.--|-..-|-.--|--..|.----|..---|...--|....-|.....|-....|--...|---..|----.|-----|.-.-.-|--..--|-.-.-.|---...|..--..|-.-.--|-....-|..--.-|-..-.|.----.|.-..-.|-.--.|-.--.-|.--.-.|.-...|-...-|.-.-.|...-..-|^| Splitter:| ]
<<font color='#0D95FF'>ENCRYPTION (alpha > morse)</font>>
A12: If [ %par22 !~ 0 & %par21 ~ A-M ]
A13: Variable Split [ Name:%par22 Splitter:- Delete Base:eek:ff ]
<<font color='#0D95FF'>ENCRYPT</font>>
A14: If [ %par221 ~ 1 ]
<<font color='#FFF52D'>-> Step 1</font>>
A15: Anchor
A16: Variable Convert [ Name:%par1 Function:To Lower Case Store Result In:%par1 ]
A17: Test Variable [ Type:Length Data:%par1 Store Result In:%tempa ]
<{loop n1}>
A18: Variable Set [ Name:%tempb To:(%tempb)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A19: Variable Section [ Name:%par1 From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A20: Goto [ Type:Action Label Number:32 Label:{loop n2} ] If [ %tempc ~R [a-z] | %tempc ~ ñ ]
A21: Goto [ Type:Action Label Number:32 Label:{loop n2} ] If [ %tempc ~R [0-9] ]
A22: Goto [ Type:Action Label Number:32 Label:{loop n2} ] If [ %tempc eq %temp3a1 | %tempc eq %temp3a2 | %tempc eq %temp3a3 | %tempc eq %temp3a4 | %tempc eq %temp3a5 | %tempc eq %temp3a6 | %tempc eq %temp3a7 | %tempc eq %temp3a8 | %tempc eq %temp3a9 | %tempc eq %temp3a10 | %tempc eq %temp3a11 | %tempc eq %temp3a12 | %tempc eq %temp3a13 | %tempc eq %temp3a14 | %tempc eq %temp3a15 | %tempc eq %temp3a16 | %tempc eq %temp3a17 | %tempc eq %temp3a18 | %tempc eq %temp3a19 ]
A23: Flash [ Text:Unknown '%tempc' element, position (%tempb). Long:eek:n ]
A24: Goto [ Type:Action Label Number:1 Label:{end} ]
<{loop n2}>
A25: Goto [ Type:Action Label Number:19 Label:{loop n1} ] If [ %tempb !~ %tempa ]
<<font color='#FFF52D'>-> Step 2</font>>
A26: Anchor
A27: Java Function [ Return:temp1 Class Or Object:String Function:new
{String} (String) Param:%par1 Param: Param: Param: Param: Param: Param: ]
A28: Java Function [ Return:temp2 Class Or Object:String Function:new
{String} (String) Param:%par222 Param: Param: Param: Param: Param: Param: ]
A29: Java Function [ Return:temp1 Class Or Object:temp1 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A30: Java Function [ Return:temp2 Class Or Object:temp2 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A31: Java Function [ Return:temp3 Class Or Object:SecretKeySpec Function:new
{SecretKeySpec} (byte[], String) Param:temp2 Param:AES Param: Param: Param: Param: Param: ]
A32: Java Function [ Return:temp4 Class Or Object:Cipher Function:getInstance
{Cipher} (String) Param:AES Param: Param: Param: Param: Param: Param: ]
A33: Java Function [ Return: Class Or Object:temp4 Function:init
{} (int, Key) Param:1 Param:temp3 Param: Param: Param: Param: Param: ]
A34: Java Function [ Return:temp5 Class Or Object:temp4 Function:doFinal
{byte[]} (byte[]) Param:temp1 Param: Param: Param: Param: Param: Param: ]
A35: Java Function [ Return:%par1 Class Or Object:Base64 Function:encodeToString
{String} (byte[], int) Param:temp5 Param:64 Param: Param: Param: Param: Param: ]
A36: Variable Set [ Name:%xxx To:
Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A37: Variable Search Replace [ Variable:%par1 Search:%xxx Ignore Case:eek:ff Multi-Line:eek:ff One Match Only:eek:ff Store Matches In: Replace Matches:eek:n Replace With: ]
<<font color='#FFF52D'>-> Step 3</font>>
A38: Anchor
A39: Test Variable [ Type:Length Data:%par1 Store Result In:%tempa ]
A40: Variable Set [ Name:%tempd To: - ( Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A41: For [ Variable:%tempb Items:1:%tempa ]
A42: Variable Section [ Name:%par1 From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A43: If [ %tempc ~R [A-Z] ]
A44: Array Push [ Variable Array:%tempd Position:%tempb Value:%tempb Fill Spaces:eek:ff ]
A45: End If
A46: End For
A47: For [ Variable:%tempb Items:%tempd() ]
A48: Variable Set [ Name:%tempd To:%tempb Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A49: Variable Set [ Name:%tempd To:, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempb !~ %tempd(<) ]
A50: End For
A51: Variable Set [ Name:%tempd To:) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A52: Variable Set [ Name:%par1 To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
<<font color='#0D95FF'>DECRYPT</font>>
A53: Else If [ %par221 ~ 2 ]
<<font color='#FFF52D'>-> Step 1</font>>
A54: Anchor
A55: Variable Set [ Name:%xxx To: - ( Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A56: Variable Split [ Name:%par1 Splitter:%xxx Delete Base:eek:ff ]
A57: Variable Split [ Name:%par12 Splitter:) Delete Base:eek:ff ]
A58: Test Variable [ Type:Length Data:%par11 Store Result In:%tempa ]
A59: Array Set [ Variable Array:%tempb Values:%par121 Splitter:, ]
A60: For [ Variable:%tempc Items:1:%tempa ]
A61: Variable Section [ Name:%par11 From:%tempc Length:1 Adapt To Fit:eek:ff Store Result In:%tempd ]
A62: If [ %tempc ~ %tempb(>) ]
A63: Array Pop [ Variable Array:%tempb Position:1 To Var: ]
A64: Variable Convert [ Name:%tempd Function:To Upper Case Store Result In:%tempd ]
A65: Variable Set [ Name:%tempe To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A66: Else If [ %tempc !~ %tempb(>) ]
A67: Variable Set [ Name:%tempe To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A68: End If
A69: End For
A70: Variable Set [ Name:%par1 To:%tempe Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<<font color='#FFF52D'>-> Step 2</font>>
A71: Anchor
A72: Java Function [ Return:temp1 Class Or Object:Base64 Function:decode
{byte[]} (String, int) Param:%par1 Param:64 Param: Param: Param: Param: Param: ]
A73: Java Function [ Return:temp2 Class Or Object:String Function:new
{String} (String) Param:%par222 Param: Param: Param: Param: Param: Param: ]
A74: Java Function [ Return:temp2 Class Or Object:temp2 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A75: Java Function [ Return:temp3 Class Or Object:SecretKeySpec Function:new
{SecretKeySpec} (byte[], String) Param:temp2 Param:AES Param: Param: Param: Param: Param: ]
A76: Java Function [ Return:temp4 Class Or Object:Cipher Function:getInstance
{Cipher} (String) Param:AES Param: Param: Param: Param: Param: Param: ]
A77: Java Function [ Return: Class Or Object:temp4 Function:init
{} (int, Key) Param:2 Param:temp3 Param: Param: Param: Param: Param: ]
A78: Java Function [ Return:temp5 Class Or Object:temp4 Function:doFinal
{byte[]} (byte[]) Param:temp1 Param: Param: Param: Param: Param: Param: ]
A79: Java Function [ Return:%par1 Class Or Object:String Function:new
{String} (byte[]) Param:temp5 Param: Param: Param: Param: Param: Param: ]
A80: End If
<<font color='#0D95FF'>ENCRYPTION (morse > alpha)</font>>
A81: Else If [ %par22 !~ 0 & %par21 ~ M-A ]
<<font color='#0D95FF'>ENCRYPT</font>>
A82: If [ %par221 ~ 1 ]
<<font color='#FFF52D'>-> Step 1</font>>
A83: Anchor
A84: Java Function [ Return:temp1 Class Or Object:String Function:new
{String} (String) Param:%par1 Param: Param: Param: Param: Param: Param: ]
A85: Java Function [ Return:temp2 Class Or Object:String Function:new
{String} (String) Param:%par222 Param: Param: Param: Param: Param: Param: ]
A86: Java Function [ Return:temp1 Class Or Object:temp1 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A87: Java Function [ Return:temp2 Class Or Object:temp2 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A88: Java Function [ Return:temp3 Class Or Object:SecretKeySpec Function:new
{SecretKeySpec} (byte[], String) Param:temp2 Param:AES Param: Param: Param: Param: Param: ]
A89: Java Function [ Return:temp4 Class Or Object:Cipher Function:getInstance
{Cipher} (String) Param:AES Param: Param: Param: Param: Param: Param: ]
A90: Java Function [ Return: Class Or Object:temp4 Function:init
{} (int, Key) Param:1 Param:temp3 Param: Param: Param: Param: Param: ]
A91: Java Function [ Return:temp5 Class Or Object:temp4 Function:doFinal
{byte[]} (byte[]) Param:temp1 Param: Param: Param: Param: Param: Param: ]
A92: Java Function [ Return:%par1 Class Or Object:Base64 Function:encodeToString
{String} (byte[], int) Param:temp5 Param:64 Param: Param: Param: Param: Param: ]
A93: Variable Set [ Name:%xxx To:
Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A94: Variable Search Replace [ Variable:%par1 Search:%xxx Ignore Case:eek:ff Multi-Line:eek:ff One Match Only:eek:ff Store Matches In: Replace Matches:eek:n Replace With: ]
<<font color='#FFF52D'>-> Step 2</font>>
A95: Anchor
A96: Variable Set [ Name:%xxx To:
Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A97: Variable Search Replace [ Variable:%par1 Search:%xxx Ignore Case:eek:ff Multi-Line:eek:ff One Match Only:eek:ff Store Matches In: Replace Matches:eek:n Replace With: ]
A98: Test Variable [ Type:Length Data:%par1 Store Result In:%tempa ]
A99: Variable Set [ Name:%tempd To: - ( Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A100: For [ Variable:%tempb Items:1:%tempa ]
A101: Variable Section [ Name:%par1 From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A102: If [ %tempc ~R [A-Z] ]
A103: Array Push [ Variable Array:%tempd Position:%tempb Value:%tempb Fill Spaces:eek:ff ]
A104: End If
A105: End For
A106: For [ Variable:%tempb Items:%tempd() ]
A107: Variable Set [ Name:%tempd To:%tempb Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A108: Variable Set [ Name:%tempd To:, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempb !~ %tempd(<) ]
A109: End For
A110: Variable Set [ Name:%tempd To:) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A111: Variable Set [ Name:%par1 To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
<<font color='#0D95FF'>DECRYPT</font>>
A112: Else If [ %par221 ~ 2 ]
<<font color='#FFF52D'>-> Step 1</font>>
A113: Anchor
A114: Variable Set [ Name:%xxx To: - ( Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A115: Variable Split [ Name:%par1 Splitter:%xxx Delete Base:eek:ff ]
A116: Variable Split [ Name:%par12 Splitter:) Delete Base:eek:ff ]
A117: Test Variable [ Type:Length Data:%par11 Store Result In:%tempa ]
A118: Array Set [ Variable Array:%tempb Values:%par121 Splitter:, ]
A119: For [ Variable:%tempc Items:1:%tempa ]
A120: Variable Section [ Name:%par11 From:%tempc Length:1 Adapt To Fit:eek:ff Store Result In:%tempd ]
A121: If [ %tempc ~ %tempb(>) ]
A122: Array Pop [ Variable Array:%tempb Position:1 To Var: ]
A123: Variable Convert [ Name:%tempd Function:To Upper Case Store Result In:%tempd ]
A124: Variable Set [ Name:%tempe To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A125: Else If [ %tempc !~ %tempb(>) ]
A126: Variable Set [ Name:%tempe To:%tempd Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A127: End If
A128: End For
A129: Variable Set [ Name:%par1 To:%tempe Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
<<font color='#FFF52D'>-> Step 2</font>>
A130: Anchor
A131: Java Function [ Return:temp1 Class Or Object:Base64 Function:decode
{byte[]} (String, int) Param:%par1 Param:64 Param: Param: Param: Param: Param: ]
A132: Java Function [ Return:temp2 Class Or Object:String Function:new
{String} (String) Param:%par2 Param: Param: Param: Param: Param: Param: ]
A133: Java Function [ Return:temp2 Class Or Object:temp2 Function:getBytes
{byte[]} () Param: Param: Param: Param: Param: Param: Param: ]
A134: Java Function [ Return:temp3 Class Or Object:SecretKeySpec Function:new
{SecretKeySpec} (byte[], String) Param:temp2 Param:AES Param: Param: Param: Param: Param: ]
A135: Java Function [ Return:temp4 Class Or Object:Cipher Function:getInstance
{Cipher} (String) Param:AES Param: Param: Param: Param: Param: Param: ]
A136: Java Function [ Return: Class Or Object:temp4 Function:init
{} (int, Key) Param:2 Param:temp3 Param: Param: Param: Param: Param: ]
A137: Java Function [ Return:temp5 Class Or Object:temp4 Function:doFinal
{byte[]} (byte[]) Param:temp1 Param: Param: Param: Param: Param: Param: ]
A138: Java Function [ Return:%par1 Class Or Object:String Function:new
{String} (byte[]) Param:temp5 Param: Param: Param: Param: Param: Param: ]
A139: End If
A140: End If
<<font color='#0D95FF'>ALPHA > MORSE</font>>
A141: If [ %par21 ~ A-M ]
<<font color='#FFF52D'>-> Step 1</font>>
A142: Anchor
A143: Variable Convert [ Name:%par1 Function:To Lower Case Store Result In:%par1 ]
A144: Test Variable [ Type:Length Data:%par1 Store Result In:%tempa ]
<{loop n3}>
A145: Variable Set [ Name:%tempb To:(%tempb)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A146: Variable Section [ Name:%par1 From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A147: For [ Variable:%tempd Items:%temp1a() ] If [ %tempc ~R [a-z] | %tempc ~ ñ ]
A148: Variable Set [ Name:%tempe To:(%tempe)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A149: If [ %tempd ~ %tempc ]
A150: Variable Set [ Name:%tempf To:%temp1b(%tempe) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A151: Goto [ Type:Action Label Number:32 Label:{loop n4} ]
A152: End If
A153: End For
A154: For [ Variable:%tempd Items:%temp2a() ] If [ %tempc ~R [0-9] ]
A155: Variable Set [ Name:%tempe To:(%tempe)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A156: If [ %tempd ~ %tempc ]
A157: Variable Set [ Name:%tempf To:%temp2b(%tempe) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A158: Goto [ Type:Action Label Number:32 Label:{loop n4} ]
A159: End If
A160: End For
A161: For [ Variable:%tempd Items:%temp3a() ] If [ %tempc eq %temp3a1 | %tempc eq %temp3a2 | %tempc eq %temp3a3 | %tempc eq %temp3a4 | %tempc eq %temp3a5 | %tempc eq %temp3a6 | %tempc eq %temp3a7 | %tempc eq %temp3a8 | %tempc eq %temp3a9 | %tempc eq %temp3a10 | %tempc eq %temp3a11 | %tempc eq %temp3a12 | %tempc eq %temp3a13 | %tempc eq %temp3a14 | %tempc eq %temp3a15 | %tempc eq %temp3a16 | %tempc eq %temp3a17 | %tempc eq %temp3a18 | %tempc eq %temp3a19 ]
A162: Variable Set [ Name:%tempe To:(%tempe)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A163: If [ %tempd eq %tempc ]
A164: Variable Set [ Name:%tempf To:%temp3b(%tempe) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempd neq %temp3a19 ]
A165: Variable Set [ Name:%tempf To:| Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempd eq %temp3a19 ]
A166: Goto [ Type:Action Label Number:32 Label:{loop n4} ]
A167: End If
A168: End For
A169: Flash [ Text:Unknown '%tempc' element, position (%tempb). Long:eek:n ]
A170: Goto [ Type:Action Label Number:1 Label:{end} ]
<{loop n4}>
A171: Variable Clear [ Name:%tempe Pattern Matching:eek:ff Local Variables Only:eek:ff ]
A172: Goto [ Type:Action Label Number:19 Label:{loop n3} ] If [ %tempb !~ %tempa ]
A173: Set Clipboard [ Text:%tempf Add:eek:ff ] If [ %par24 ~ 1 ]
<<font color='#FFF52D'>-> Step 2</font>>
A174: Anchor
A175: Test Variable [ Type:Length Data:%tempf Store Result In:%tempa ]
<Sound>
A176: If [ %par23 ~ S ]
A177: Notify [ Title:Morse Translator Text:Playing... Icon:mw_editor_linear_scale Number:0 Permanent:eek:n Priority:5 ]
A178: For [ Variable:%tempb Items:1:%tempa ]
A179: Variable Section [ Name:%tempf From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A180: Beep [ Frequency:6000 Duration:100 Amplitude:50 Stream:3 ] If [ %tempc eq . ]
A181: Beep [ Frequency:6000 Duration:300 Amplitude:50 Stream:3 ] If [ %tempc eq - ]
A182: Wait [ MS:100 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq %temp3b19 ]
A183: Wait [ MS:700 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq | ]
A184: End For
<Vibrator>
A185: Else If [ %par23 ~ V ]
A186: Variable Set [ Name:%tempd To:0, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:ff ]
A187: For [ Variable:%tempb Items:1:%tempa ]
A188: Variable Section [ Name:%tempf From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A189: Variable Set [ Name:%tempd To:100,100, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempc eq . ]
A190: Variable Set [ Name:%tempd To:300,100, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempc eq - ]
A191: Variable Set [ Name:%tempd To:0,700, Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempc eq | ]
A192: End For
A193: Variable Clear [ Name:%tempc Pattern Matching:eek:ff Local Variables Only:eek:ff ]
A194: Array Set [ Variable Array:%tempd Values:%tempd Splitter:, ]
A195: For [ Variable:%tempb Items:1:%tempd(#) ]
A196: Variable Set [ Name:%tempc To:%tempd(%tempb) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A197: Variable Set [ Name:%tempc To:+ Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempb !~ %tempd(#) ]
A198: End For
A199: Variable Set [ Name:%tempc To:%tempc Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A200: Notify [ Title:Morse Translator Text:Playing... Icon:mw_editor_linear_scale Number:0 Permanent:eek:n Priority:5 ]
A201: Java Function [ Return:(Vibrator) temp Class Or Object:CONTEXT Function:getSystemService
{Object} (String) Param:vibrator Param: Param: Param: Param: Param: Param: ]
A202: Java Function [ Return: Class Or Object:temp Function:vibrate
{} (long[], int) Param:%tempd Param:-1 Param: Param: Param: Param: Param: ]
A203: Wait [ MS:%tempc Seconds:0 Minutes:0 Hours:0 Days:0 ]
<Flash Light>
A204: Else If [ %par23 ~ L ]
A205: Notify [ Title:Morse Translator Text:Playing... Icon:mw_editor_linear_scale Number:0 Permanent:eek:n Priority:5 ]
A206: For [ Variable:%tempb Items:1:%tempa ]
A207: Variable Section [ Name:%tempf From:%tempb Length:1 Adapt To Fit:eek:ff Store Result In:%tempc ]
A208: Torch [ Set:eek:n ]
A209: Wait [ MS:100 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq . ]
A210: Wait [ MS:300 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq - ]
A211: Torch [ Set:eek:ff ]
A212: Wait [ MS:100 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq . | %tempc eq - ]
A213: Wait [ MS:700 Seconds:0 Minutes:0 Hours:0 Days:0 ] If [ %tempc eq | ]
A214: End For
A215: End If
<<font color='#0D95FF'>MORSE > ALPHA</font>>
A216: Else If [ %par21 ~ M-A ]
<<font color='#FFF52D'>-> Step 1</font>>
A217: Anchor
A218: Variable Split [ Name:%par1 Splitter: Delete Base:eek:ff ]
<{loop n5}>
A219: Variable Set [ Name:%tempb To:(%tempb)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A220: For [ Variable:%tempd Items:%temp4b() ]
A221: Variable Set [ Name:%tempe To:(%tempe)+1 Recurse Variables:eek:ff Do Maths:eek:n Append:eek:ff ]
A222: If [ %tempd ~ %par1(%tempb) | %par1(%tempb) eq | ]
A223: Variable Set [ Name:%tempf To:%temp4a(%tempe) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %tempd ~ %par1(%tempb) ]
A224: Variable Set [ Name:%tempf To: Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ] If [ %par1(%tempb) eq | ]
A225: Goto [ Type:Action Label Number:28 Label:{loop n6} ]
A226: End If
A227: End For
A228: If [ %tempe ~ %temp4b(#) ]
A229: Flash [ Text:Unknown '%par1(%tempb)' element, position (%tempb). Long:eek:n ]
A230: Goto [ Type:Action Label Number:1 Label:{end} ]
A231: End If
<{loop n6}>
A232: Variable Clear [ Name:%tempe Pattern Matching:eek:ff Local Variables Only:eek:ff ]
A233: Goto [ Type:Action Label Number:6 Label:{loop n5} ] If [ %tempb !~ %par1(#) ]
A234: Set Clipboard [ Text:%tempf Add:eek:ff ] If [ %par24 ~ 1 ]
<<font color='#FFF52D'>-> Step 2</font>>
A235: Anchor
A236: Notify [ Title:Morse Translator Text:Playing... Icon:mw_editor_linear_scale Number:0 Permanent:eek:n Priority:5 ]
A237: Say [ Text:%tempf Engine:Voice:com.ivona.tts:spa-ESP Stream:3 Pitch:7 Speed:5 Respect Audio Focus:eek:n Network:eek:ff Continue Task Immediately:eek:ff ]
A238: End If
<{end}>
A239: Notify Cancel [ Title:Morse Translator Warn Not Exist:eek:ff ]
A240: Profile Status [ Name:MT - Notification Set:eek:ff ]

· Key Generator...

MT - Key Generator
A1: Array Set [ Variable Array:%temp Values:a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z Splitter:, ]
<16=128bits | 24=192bits | 32=256bits>
A2: For [ Variable:%xxx Items:1:16 ]
A3: Variable Randomize [ Name:%tempa Min:1 Max:62 ]
A4: Variable Set [ Name:%tempb To:%temp(%tempa) Recurse Variables:eek:ff Do Maths:eek:ff Append:eek:n ]
A5: End For
A6: Set Clipboard [ Text:%tempb Add:eek:ff ]
A7: Flash [ Text:Key: %tempb Long:eek:n ]