Problems with other languages?

Technical support and scripting issues

Moderators: Dorian (MJT support), JRL

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Problems with other languages?

Post by Phil Pendlebury » Thu Nov 08, 2007 8:32 am

Hi there,

I received this from one of my users:

[quote]... are you aware that the “calculatorsâ€Â
Phil Pendlebury - Linktree

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 8:38 am

I have of course sent him this:

Please can you tell me:
Have you tried with all the different calculators?
What exactly is the error message?
but was hoping someone may be able to point me in the right direction anyway.
Phil Pendlebury - Linktree

User avatar
Marcus Tettmar
Site Admin
Posts: 7380
Joined: Thu Sep 19, 2002 3:00 pm
Location: Dorset, UK
Contact:

Post by Marcus Tettmar » Thu Nov 08, 2007 9:13 am

Two things:

1) You have hard-coded the initial numbers into the dialog with periods as the decimal placeholder.

2) Complex Expressions can only cope with periods. This is a bit naughty since they ought to adapt to the regional settings as the rest of MacroScript can. But we can mitigate this by either replacing dots with commas before passing values to complex expressions, or doing the calculations within the complex expressions themselves.

Point 2 above is what is causing the error message. Point 1 doesn't actually cause any error or change in functionality, but it would be nicer for the user to see the numbers in his locale (in some countries the period denotes the thousand separator).

So, taking the above into account a working version of your script follows:

Code: Select all

Let>APP_TITLE=PAP Transpose EQ

//Determine the decimal placeholder
Let>num=0.1
LibFunc>kernel32,GetNumberFormatA,r,0,0,str:num,0,buf,255
MidStr>r_5,2,1,DecimalPlaceHolder

Dialog>Dialog1
   Caption=Transpose EQ
   Width=269
   Height=338
   Top=CENTER
   Left=CENTER
   Max=0
   Min=0
   Close=0
   Resize=0
   Edit=msEdit1,16,80,113,1
   Edit=msEdit3,16,128,113,100
   Edit=msEdit5,16,152,113,500
   Edit=msEdit7,16,176,113,2500
   Edit=msEdit9,16,200,113,7500
   Edit=msEdit11,16,224,113,15000
   Edit=msEdit4,136,128,113,105%DecimalPlaceHolder%9463
   Edit=msEdit6,136,152,113,529%DecimalPlaceHolder%7315
   Edit=msEdit8,136,176,113,2648%DecimalPlaceHolder%6577
   Edit=msEdit10,136,200,113,7945%DecimalPlaceHolder%9732
   Edit=msEdit12,136,224,113,15891%DecimalPlaceHolder%9464
   Button=Exit,16,264,113,33,1
   Button=CALC,136,264,113,33,2
   Label=Transpose (semi-tones):,16,64,true
   Label=EQ Transpose,56,16,true
   Label=www.pendlebury.biz,56,32,true
   Label=Transposed Freq (Hz):,136,112,true
   Label=Original Freq (Hz):,16,112,true
   Label=by Phil Pendlebury,128,16,true
   Image=C:\Users\Phil\Documents\Macro Scheduler\graphics\meapother.ico,16,16,33,33
EndDialog>Dialog1

Show>Dialog1

Label>ACTION

LibFunc>User32,FindWindowA,dlgHwnd,TForm,Transpose EQ
LibFunc>User32,FindWindowExA,edit1Hwnd,dlgHwnd,0,TEdit,str:105.9463
LibFunc>User32,FindWindowExA,edit2Hwnd,dlgHwnd,0,TEdit,str:529.7315
LibFunc>User32,FindWindowExA,edit3Hwnd,dlgHwnd,0,TEdit,str:2648.6577
LibFunc>User32,FindWindowExA,edit4Hwnd,dlgHwnd,0,TEdit,str:7945.9732
LibFunc>User32,FindWindowExA,edit5Hwnd,dlgHwnd,0,TEdit,str:15891.9464

LibFunc>User32,EnableWindow,rEW,edit1Hwnd,0
LibFunc>User32,EnableWindow,rEW,edit2Hwnd,0
LibFunc>User32,EnableWindow,rEW,edit3Hwnd,0
LibFunc>User32,EnableWindow,rEW,edit4Hwnd,0
LibFunc>User32,EnableWindow,rEW,edit5Hwnd,0

  GetDialogAction>Dialog1,r
  
  let>transpose=%Dialog1.msEdit1%
  let>original1=%Dialog1.msEdit3%
  let>eq1=%Dialog1.msEdit4%
  let>original2=%Dialog1.msEdit5%
  let>eq2=%Dialog1.msEdit6%
  let>original3=%Dialog1.msEdit7%
  let>eq3=%Dialog1.msEdit8%
  let>original4=%Dialog1.msEdit9%
  let>eq4=%Dialog1.msEdit10%
  let>original5=%Dialog1.msEdit11%
  let>eq5=%Dialog1.msEdit12%

  IF>r=1,Exit
  IF>r=2,Check

GOTO>ACTION

////////////////////////////////////////////////////////////////////

SRT>Check
let>cheqsum=transpose+original1
let>cheqsum=cheqsum+original2
let>cheqsum=cheqsum+original3
let>cheqsum=cheqsum+original4
let>cheqsum=cheqsum+original5
let>chq=%cheqsum%/%cheqsum%
If>chq=1,CalcEQ,neednum
END>Check

SRT>CalcEQ

 let>magicb1={Power(2,%transpose%/12)}
 let>magicc1=original1*magicb1
 let>total1=magicc1

 let>magicb2={Power(2,%transpose%/12)}
 let>magicc2=original2*magicb2
 let>total2=magicc2
 
 let>magicb3={Power(2,%transpose%/12)}
 let>magicc3=original3*magicb3
 let>total3=magicc3
 
 let>magicb4={Power(2,%transpose%/12)}
 let>magicc4=original4*magicb4
 let>total4=magicc4
 
 let>magicb5={Power(2,%transpose%/12)}
 let>magicc5=original5*magicb5
 let>total5=magicc5
 
 let>Dialog1.msEdit4=total1
 let>Dialog1.msEdit6=total2
 let>Dialog1.msEdit8=total3
 let>Dialog1.msEdit10=total4
 let>Dialog1.msEdit12=total5

 ResetDialogAction>Dialog1
END>CalcEQ

SRT>neednum
let>Dialog1.msEdit1=1
let>Dialog1.msEdit3=100
let>Dialog1.msEdit4=105%DecimalPlaceHolder%9463
let>Dialog1.msEdit5=500
let>Dialog1.msEdit6=529%DecimalPlaceHolder%7315
let>Dialog1.msEdit7=2500
let>Dialog1.msEdit6=2648%DecimalPlaceHolder%6577
let>Dialog1.msEdit9=7500
let>Dialog1.msEdit10=7945%DecimalPlaceHolder%9732
let>Dialog1.msEdit11=15000
let>Dialog1.msEdit12=1589%DecimalPlaceHolder%9464
ResetDialogAction>Dialog1
msg>Please check your input%CRLF%%CRLF%All fields must be numeric!
END>neednum

Label>Exit
This script will work whatever the locale. The API function at the top gets the decimal placeholder and then the values in the dialog are formatted in accordance.

And note that rather than do the transpose/12 calc before the complex expression it is now part of it.
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar

Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 10:59 am

OK thank you. I think I understand.

I have modified the second script as follows. Please could you have a look if you get 5 minutes and see if it looks OK? These are free to my users by the way so don't worry about that side of things.

The 3rd (and final) script I can see nothing wrong. Can you also see anything I have missed there? It may give me a better idea what to look out for in future,

Thank you ever so much for your assistance. Much appreciated as usual:

2nd Script (I have modified but have I got it right?):

Code: Select all

Let>APP_TITLE=PAP Delay Calculator

//Determine the decimal placeholder
Let>num=0.1
LibFunc>kernel32,GetNumberFormatA,r,0,0,str:num,0,buf,255
MidStr>r_5,2,1,DecimalPlaceHolder


Dialog>Dialog1
   Caption=PAP Delay Calculator
   Width=295
   Height=244
   Top=CENTER
   Left=CENTER
   Max=0
   Min=0
   Close=0
   Resize=0
   Edit=msEdit1,16,80,41,120
   ComboBox=msComboBox1,72,80,49,1/1%CRLF%1/2%CRLF%1/4%CRLF%1/8%CRLF%1/16%CRLF%1/32
   ComboBox=msComboBox2,128,80,65,Straight%CRLF%Triplets%CRLF%Dotted
   Label=BPM,16,64,true
   Edit=msEdit2,208,80,65,2000
   Button=Exit,104,168,81,33,1
   Button=Calc. BPM,16,168,81,33,3
   Button=Calc. MS,192,168,81,33,2
   Label=MILLISECS,208,64,true
   Label=Delay Calculator: by Phil Pendlebury,56,16,true
   Label=www.pendlebury.biz,56,32,true
   Label=Calculates BPM from Note Type and MS,72,120,true
   Label=Calculates MS from Note Type and BPM,72,136,true
   Label=NOTE TYPE,72,64,true
   Label=Calc. BPM:,16,120,true
   Label=Calc. MS:,16,136,true
   Image=C:\Users\Phil\Documents\Macro Scheduler\graphics\meapother.ico,16,16,33,33
EndDialog>Dialog1


Show>Dialog1
Label>ACTION
GetDialogAction>Dialog1,r
let>tempo=%Dialog1.msEdit1%
let>beats=%Dialog1.msComboBox1%
let>style=%Dialog1.msComboBox2%
let>seconds=%Dialog1.msEdit2%

IF>r=1,Exit
IF>r=2,CalcMS
IF>r=3,CalcBPM

IF>style=Straight
IF>beats=1/1
  let>subd=0%DecimalPlaceHolder%25
ENDIF
IF>beats=1/2
  let>subd=0%DecimalPlaceHolder%5
ENDIF
IF>beats=1/4
  let>subd=1
ENDIF
IF>beats=1/8
  let>subd=2
ENDIF
IF>beats=1/16
  let>subd=4
ENDIF
IF>beats=1/32
  let>subd=8
ENDIF
ENDIF

IF>style=Triplets
IF>beats=1/1
  let>subd=0%DecimalPlaceHolder%375
ENDIF
IF>beats=1/2
  let>subd=0%DecimalPlaceHolder%75
ENDIF
IF>beats=1/4
  let>subd=1%DecimalPlaceHolder%5
ENDIF
IF>beats=1/8
  let>subd=3
ENDIF
IF>beats=1/16
  let>subd=6
ENDIF
IF>beats=1/32
  let>subd=12
ENDIF
ENDIF

IF>style=Dotted
IF>beats=1/1
  let>subd=0%DecimalPlaceHolder%166666666666666666666
ENDIF
IF>beats=1/2
  let>subd=0%DecimalPlaceHolder%333333333333333333333
ENDIF
IF>beats=1/4
  let>subd=0%DecimalPlaceHolder%666666666666666666666
ENDIF
IF>beats=1/8
  let>subd=1%DecimalPlaceHolder%333333333333333333333
ENDIF
IF>beats=1/16
  let>subd=2%DecimalPlaceHolder%666666666666666666666
ENDIF
IF>beats=1/32
  let>subd=5%DecimalPlaceHolder%333333333333333333333
ENDIF
ENDIF

GOTO>ACTION



SRT>CalcMS
IF>tempo>0
  let>tempocheck=%tempo%/%tempo%
  IF>tempocheck<>1
    GOTO>notempo
  ENDIF

let>premath=tempo/60
let>premath=premath*subd
let>premath=premath*0%DecimalPlaceHolder%001
let>premath=1/premath
let>millisec={round(%premath%)}
Let>Dialog1.msEdit2=millisec

ResetDialogAction>Dialog1
ENDIF
Label>notempo
End>CalcMS


SRT>CalcBPM
IF>seconds>0
  let>secondcheck=%seconds%/%seconds%
  IF>secondcheck<>1
    GOTO>noseconds
  ENDIF

let>premath=seconds/60
let>premath=premath*subd
let>premath=premath*0%DecimalPlaceHolder%001
let>premath=1/premath
let>tempocalc={round(%premath%)}
Let>Dialog1.msEdit1=tempocalc

ResetDialogAction>Dialog1
ENDIF
Label>noseconds
End>CalcBPM

Label>Exit


3rd Script (I have not modified because I can't see anything obvious that needs changing):

Code: Select all

Let>APP_TITLE=PAP Time Calculator

VBSTART
''
VBEND

Dialog>Dialog1
   Caption=PAP Time Calculator
   Width=196
   Height=279
   Top=CENTER
   Left=CENTER
   Max=0
   Min=0
   Close=0
   Resize=0
   Edit=msEdit1,16,80,113,120
   Edit=msEdit2,16,128,57,8
   Edit=msEdit3,16,176,25,0
   Edit=msEdit4,48,176,25,0
   Edit=msEdit5,80,176,49,16
   Button=Exit,16,216,161,25,1
   Button=BPM,136,72,41,33,2
   Button=BARS,136,120,41,33,3
   Button=TIME,136,168,41,33,4
   Label=BPM,16,64,true
   Label=H,16,160,true
   Label=Time Calculator:,56,16,true
   Label=www.pendlebury.biz,56,32,true
   Label=BARS,16,112,true
   Label=SECS,80,160,true
   Label=M,48,160,true
   Edit=msEdit6,80,128,49,1
   Label=EIGHTS,80,112,true
   Label=by Phil P,136,16,true
   Image=C:\Users\Phil\Documents\Macro Scheduler\graphics\meapother.ico,16,16,33,33
EndDialog>Dialog1


Show>Dialog1


Label>ACTION
LibFunc>User32,FindWindowA,dlgHwnd,TForm,PAP Time Calculator
LibFunc>User32,FindWindowExA,edit2Hwnd,dlgHwnd,0,TEdit,str:1
LibFunc>User32,EnableWindow,rEW,edit2Hwnd,0



  GetDialogAction>Dialog1,r
  let>bpmx=%Dialog1.msEdit1%
  let>barsx=%Dialog1.msEdit2%
  let>hoursx=%Dialog1.msEdit3%
  let>minutesx=%Dialog1.msEdit4%
  let>secondsx=%Dialog1.msEdit5%
  
  
  IF>r=1,Exit
  IF>r=2,CalcBPM
  IF>r=3,CalcBARS
  IF>r=4,CalcTIME
  
GOTO>ACTION

///////////////////////////////////////////////////////////

SRT>CalcTIME
  IF>bpmx>0
    let>XtestX=%bpmx%/%bpmx%
    IF>XtestX<>1
      Let>bpmx=0
      Msg>Calculation Halted!%CRLF%BPM does not contain a numeric value.
      GOTO>SkipTIME
    ENDIF
    IF>barsx>0
      let>XtestX=%barsx%/%barsx%
      IF>XtestX<>1
        Let>barsx=0
        Msg>Calculation Halted!%CRLF%Bars does not contain a numeric value.
        GOTO>SkipTIME
      ENDIF
      let>seconds=barsx*240
      let>seconds=seconds/bpmx
      GOSUB>gettimefromsecs
      let>Dialog1.msEdit3=hours
      let>Dialog1.msEdit4=minutes
      VBEval>Round(%seconds%,2),seconds
      let>divby8=barsx/8
      VBEval>Round(%divby8%,2),divby8
      let>Dialog1.msEdit5=seconds
      let>Dialog1.msEdit6=divby8
    ENDIF
  ENDIF
Label>SkipTIME
ResetDialogAction>Dialog1
END>CalcTIME

///////////////////////////////////////////////////////////

SRT>CalcBARS
  IF>bpmx>0
    let>XtestX=%bpmx%/%bpmx%
    IF>XtestX<>1
      Let>bpmx=0
      Msg>Calculation Halted!%CRLF%BPM does not contain a numeric value.
      GOTO>SkipBARS
    ENDIF
    GOSUB>getseconds
    IF>seconds>0
      let>barsz=bpmx*seconds
      let>barsz=barsz/240
      VBEval>Round(%barsz%,2),barsz
      let>divby8=barsz/8
      VBEval>Round(%divby8%,2),divby8
      let>Dialog1.msEdit2=barsz
      let>Dialog1.msEdit6=divby8
    ENDIF
  ENDIF
Label>SkipBARS
ResetDialogAction>Dialog1
END>CalcBARS

/////////////////////////////////////////////////////////////////

SRT>CalcBPM
  IF>barsx>0
    let>XtestX=%barsx%/%barsx%
    IF>XtestX<>1
      Let>barsx=0
      Msg>Calculation Halted!%CRLF%Bars does not contain a numeric value.
      GOTO>SkipBPM
    ENDIF
    GOSUB>getseconds
    IF>seconds>0
      let>tempo=barsx*240
      let>tempo=tempo/seconds
      VBEval>Round(%tempo%,2),tempo
      let>divby8=barsx/8
      VBEval>Round(%divby8%,2),divby8
      let>Dialog1.msEdit1=tempo
      let>Dialog1.msEdit6=divby8
    ENDIF
  ENDIF
Label>SkipBPM
ResetDialogAction>Dialog1
END>CalcBPM



/////////////////////////////////////////////////////////////////////


SRT>getseconds
let>sechours=hoursx*3600
let>secmins=minutesx*60
let>secsecs=secondsx
let>seconds=sechours+secmins
let>seconds=seconds+secsecs
let>XtestX=%seconds%/%seconds%
IF>XtestX<>1
Let>seconds=0
Msg>Calculation Halted!%CRLF%Time does not contain a numeric value.
ENDIF
END>getseconds


/////////////////////////////////////////////////////////////////////


SRT>gettimefromsecs
IF>seconds>0

let>hours=0
REPEAT>gethours
IF>seconds>3599
let>hours=hours+1
let>seconds=seconds-3600
ENDIF
let>gethours=seconds
UNTIL>gethours<3600

let>minutes=0
REPEAT>getminutes
IF>seconds>59
let>minutes=minutes+1
let>seconds=seconds-60
ENDIF
let>getminutes=seconds
UNTIL>getminutes<60

// MSG> HOUR: %hours% MIN: %minutes% SEC: %seconds%

ENDIF
END>gettimefromsecs

////////////////////////////////////////////////////////////////////


Label>Exit

Last edited by Phil Pendlebury on Thu Nov 08, 2007 5:59 pm, edited 1 time in total.
Phil Pendlebury - Linktree

User avatar
Marcus Tettmar
Site Admin
Posts: 7380
Joined: Thu Sep 19, 2002 3:00 pm
Location: Dorset, UK
Contact:

Post by Marcus Tettmar » Thu Nov 08, 2007 11:35 am

Phil,

You can test it yourself. First make sure the scripts run fine for you. Next, go into Control Panels/Regional Settings and change the decimal placeholder to "," and the thousand separator to ".". Hit Apply. Restart Macro Scheduler and run the script again. If it works with no errors you know you now have it working for both locales.
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar

Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 11:47 am

Thanks Marcus. Sorry, I didn't expect you to re-write the whole scripts for me LOL.

I must admit though I never realised HOW to do that test. DOH! :oops:
Phil Pendlebury - Linktree

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 11:52 am

OK tested with German and French and neither of the second two scripts work. The one that you edited does work.

I can't see what I am doing wrong sorry.
Phil Pendlebury - Linktree

User avatar
Marcus Tettmar
Site Admin
Posts: 7380
Joined: Thu Sep 19, 2002 3:00 pm
Location: Dorset, UK
Contact:

Post by Marcus Tettmar » Thu Nov 08, 2007 12:16 pm

Which line causes the error? (Use the debugger to find out)
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar

Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 12:19 pm

Ok I will give a more detailed report as soon as time permits. Thank you. :-)
Phil Pendlebury - Linktree

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 5:20 pm

For script number 1:
Invalid Parameters to ROUND
cannot read String as Float

For script number 2:
Microsoft VBScript Runtime error: 450
Wrong number of arguments or invalid property assignment: "Round"

I am sorry but this is beyond me to solve.

Please help. :oops: :oops: :oops:
Phil Pendlebury - Linktree

User avatar
Marcus Tettmar
Site Admin
Posts: 7380
Joined: Thu Sep 19, 2002 3:00 pm
Location: Dorset, UK
Contact:

Post by Marcus Tettmar » Thu Nov 08, 2007 5:31 pm

As you are stepping through with the debugger which line causes the error? Open script in advanced editor. Press F8 to execute first line. Press F8 again .... etc. When error appears cursor is on culprit line. Tell us what line it is.

I'll take a look and fix the script myself - but just trying to gently nudge you towards at least identifying which line causes the error ....
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar

Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?

User avatar
Marcus Tettmar
Site Admin
Posts: 7380
Joined: Thu Sep 19, 2002 3:00 pm
Location: Dorset, UK
Contact:

Post by Marcus Tettmar » Thu Nov 08, 2007 5:37 pm

Both second two scripts work fine for me when using comma and period as decimal separator with the exception of the third script when I hit the TIME button. However, I think your code has been mangled by the forum. Line 78 is:

IF>XtestXbarsx=0

Doesn't look right.

Paste your code again and check Disable HTML and Disable Smilies.

Step through with the debugger. You'll then know exactly which line causes the error.
Marcus Tettmar
http://mjtnet.com/blog/ | http://twitter.com/marcustettmar

Did you know we are now offering affordable monthly subscriptions for Macro Scheduler Standard?

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 6:01 pm

I have reposted with HTML off and smilies off. There is still a lot of extra space being added but you were right the line was made wrong by the forum.

I will now step through and post back.

Thank you.
Phil Pendlebury - Linktree

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Thu Nov 08, 2007 6:12 pm

PAP Time Calculator:


Line 87-89
Line 112-114
Line 137-139

VBEval>Round(%seconds%,2),seconds
let>divby8=barsx/8
VBEval>Round(%divby8%,2),divby8

--------------------

PAP Delay Calculator:

line 129:
let>millisec={round(%premath%)}

line 149:
let>tempocalc={round(%premath%)}

---------------------

It is certainly linked to the {round} function. I have tried a similar approach by putting all the calculations into one string but it didn't work.

I am sorry about this. I do not make any money from these scripts so I don't feel too bad about asking for "help". :-)

The VBEval stuff has always confused me to be honest and I just use it pretty much parrot fashion from other examples.

If you do get chance to have closer look that would be great but this is not a priority support question I understand that.

Thanks again.
Phil Pendlebury - Linktree

User avatar
Phil Pendlebury
Automation Wizard
Posts: 538
Joined: Tue Jan 16, 2007 9:00 am
Contact:

Post by Phil Pendlebury » Mon Nov 12, 2007 6:41 am

Hi Marcus have you had any chance to look at this?

Could it be that VB has trouble with regionalism? I'm not really sure what to do next. Can anyone help please?

Thank you.
Phil Pendlebury - Linktree

Post Reply
Sign up to our newsletter for free automation tips, tricks & discounts