Bc2000 (for the BCF2000 & BCR2000) group photo

Yahoo Groups archive

Bc2000 (for the BCF2000 & BCR2000)

Index last updated: 2026-04-28 23:16 UTC

Thread

Script Editor - Appreciate your advice

Script Editor - Appreciate your advice

2010-12-20 by gil.brand33

Greetings,

Though I reviewed the documentation (under "Files") regarding SysEx and the "Script Editor", I would appreciate some help from the experienced ones :)

I would like (if possible) to configure an existing BCR preset to send three SysEx messages in a single press of button #4.


If (Button #4 = Off) then send: /The *default* state

F0 01 20 01 2A 33 02 00 F7 /Set value of x02 to parameter x33

F0 01 20 01 2A 35 01 00 F7 /Set value of x01 to parameter x35

F0 01 20 01 2A 38 01 00 F7 ; /Set value of x01 to parameter x38

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

If (Button #4 = On) then send:

F0 01 20 01 2A 33 03 00 F7 /Set value of x03 to parameter x33

F0 01 20 01 2A 35 00 00 F7 /Set value of x00 to parameter x35

F0 01 20 01 2A 38 02 00 F7 /Set value of x02 to parameter x38

Is it possible, or do I have to use extra buttons for such a task?

In any case,
- What ".mode" should I use for the button(s)?
- Can I, and should I omit the ".minmax" & ".default" macros for that purpose?
- What would the content of the ".tx" line be?

$rev R1

$button 4

.mode

[.minmax 0 0]

[.default 0]

.tx

.showvalue on

$end

After sending the above code (completed of course) to the BCR through the "Script Editor", should I just press "Store" twice in order to write the changes to my current preset?

Is there anything else I should do before/after sending the script?


Thank you very much!

Have a joyful day,

Gil

Re: Script Editor - Appreciate your advice

2010-12-20 by Mark

--- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@...> wrote:
> I would like (if possible) to configure an _existing _BCR preset to send 
> three SysEx messages in a _single press_ of button #4.
> 
> 
> If (Button #4 = *Off*) then send:/The *default* state
> 
> F0 01 20 01 2A 33 02 00 F7/Set value of x02 to parameter x33
> 
> F0 01 20 01 2A 35 01 00 F7/Set value of x01 to parameter x35
> 
> F0 01 20 01 2A 38 01 00 F7/Set value of x01 to parameter x38
> 
> ------------------------------------------------------------------------------------- 
> 
> 
> If (Button #4 = *On*) then send:
> 
> F0 01 20 01 2A 33 03 00 F7/Set value of x03 to parameter x33
> 
> F0 01 20 01 2A 35 00 00 F7/Set value of x00 to parameter x35
> 
> F0 01 20 01 2A 38 02 00 F7/Set value of x02 to parameter x38
> 
> Is it possible, or do I have to use extra buttons for such a task?

It can be done in one button, but it's very tricky, because of a bug in the BCR affecting SysEx messages in ".tx" statements.
(See BCMI ("BC MIDI Implementation.pdf"), sections 14.6.3/4).

In any case the script below circumvents this bug:

$rev R1
$button 4
  .showvalue on
  .default 2
  .mode toggle
  .minmax 2 3
  .tx $F0 $01 $20 $01 $2A $33 val $00 $F7
  .tx $F0 $01 $20 $01 $2A $35 ifn $01 $00 $F7 ifp $00 $00 $F7
  .tx $F0 $01 $20 $01 $2A $38 ifn $01 $00 $F7 ifp $02 $00 $F7
$end

> In any case,
> - What "*.mode*" should I use for the button(s)?

I think you want "toggle", as used above.
See BCMI section 15.9.

> - Can I, and should I omit the "*.minmax*" & "*.default*" macros for 
> that purpose?

".minmax" is essential.

I'm never sure myself about ".default".
Maybe you can try to make sense of what BCMI section 14.3 says about it...

> After sending the above code (completed of course) to the BCR through 
> the "Script Editor", should I just press "Store" twice in order to write 
> the changes to my current preset?
> 
> Is there anything else I should do before/after sending the script?

Maybe Royce can answer these questions.

Hope this helps,
Mark.

Re: Script Editor - Appreciate your advice

2010-12-21 by gil.brand33

--- In bc2000@yahoogroups.com, "Mark" <markwinvdb@...> wrote:
>
> --- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@> wrote:
> > I would like (if possible) to configure an _existing _BCR preset to send 
> > three SysEx messages in a _single press_ of button #4.
> > 
> > 
> > If (Button #4 = *Off*) then send:/The *default* state
> > 
> > F0 01 20 01 2A 33 02 00 F7/Set value of x02 to parameter x33
> > 
> > F0 01 20 01 2A 35 01 00 F7/Set value of x01 to parameter x35
> > 
> > F0 01 20 01 2A 38 01 00 F7/Set value of x01 to parameter x38
> > 
> > ------------------------------------------------------------------------------------- 
> > 
> > 
> > If (Button #4 = *On*) then send:
> > 
> > F0 01 20 01 2A 33 03 00 F7/Set value of x03 to parameter x33
> > 
> > F0 01 20 01 2A 35 00 00 F7/Set value of x00 to parameter x35
> > 
> > F0 01 20 01 2A 38 02 00 F7/Set value of x02 to parameter x38
> > 
> > Is it possible, or do I have to use extra buttons for such a task?
> 
> It can be done in one button, but it's very tricky, because of a bug in the BCR affecting SysEx messages in ".tx" statements.
> (See BCMI ("BC MIDI Implementation.pdf"), sections 14.6.3/4).
> 
> In any case the script below circumvents this bug:
> 
> $rev R1
> $button 4
>   .showvalue on
>   .default 2
>   .mode toggle
>   .minmax 2 3
>   .tx $F0 $01 $20 $01 $2A $33 val $00 $F7
>   .tx $F0 $01 $20 $01 $2A $35 ifn $01 $00 $F7 ifp $00 $00 $F7
>   .tx $F0 $01 $20 $01 $2A $38 ifn $01 $00 $F7 ifp $02 $00 $F7
> $end
> 
> > In any case,
> > - What "*.mode*" should I use for the button(s)?
> 
> I think you want "toggle", as used above.
> See BCMI section 15.9.
> 
> > - Can I, and should I omit the "*.minmax*" & "*.default*" macros for 
> > that purpose?
> 
> ".minmax" is essential.
> 
> I'm never sure myself about ".default".
> Maybe you can try to make sense of what BCMI section 14.3 says about it...
> 
> > After sending the above code (completed of course) to the BCR through 
> > the "Script Editor", should I just press "Store" twice in order to write 
> > the changes to my current preset?
> > 
> > Is there anything else I should do before/after sending the script?
> 
> Maybe Royce can answer these questions.
> 
> Hope this helps,
> Mark.
>

Thank you very much Mark! It helped a lot :)
I wasn't aware that it is possible to use more than one ".tx" in a single block.

Does "ifp/ifn" corresponds to "On/Off" respectively? (Couldn't find that in the BCMI…)

I reviewed section 14.3 in the BCMI, and I'm not quite sure how ".default" behaves under all possible scenarios…

Therefore, in order to `ignore' both ".default" & ".minmax" (to be on the safe side..), I was thinking of replacing only the first ".tx" line in your block, so that the whole block would look like this:
 
$rev R1
$button 4
.showvalue on
.default 2
.mode toggle
.minmax 2 3
.tx $F0 $01 $20 $01 $2A $33 ifn $02 $00 $F7 ifp $03 $00 $F7
.tx $F0 $01 $20 $01 $2A $35 ifn $01 $00 $F7 ifp $00 $00 $F7
.tx $F0 $01 $20 $01 $2A $38 ifn $01 $00 $F7 ifp $02 $00 $F7
$end


Would that be a valid block?
Would it do exactly the same as the block you suggested?

*Last but not least*
Shouldn't there be some delay time between the executions of the ".tx" lines, so that the receiving synth can process the incoming data?

Thanks again,
Gil.

Re: Script Editor - Appreciate your advice

2010-12-21 by Mark

--- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@...> wrote:
> Does "ifp/ifn" corresponds to "On/Off" respectively? (Couldn't find that 
> in the BCMI…)

Strictly speaking "ifp <something>" simply means "output <something> upon a positive value change".

For an ENCODER this can involve any positive jump between values within the range from min to max.

However, unless mode=increment/incval, a BUTTON's value only flips between its actual min and max, so in this case "ifp <something>" does mean "output <something> when the button switches to ON".
(At least this is the case if you've used appropriate ".default" and ".minmax" statements: see below.)

> I reviewed section 14.3 in the BCMI, and I'm not quite sure how 
> ".default" behaves under all possible scenarios…

Welcome to the club...

> Therefore, in order to `ignore' both ".default" & ".minmax" (to be on 
> the safe side..), I was thinking of replacing only the first ".tx" line 
> in your block, so that the whole block would look like this:
> 
> $rev R1
> $button 4
> .showvalue on
> .default 2
> .mode toggle
> .minmax 2 3
> .tx $F0 $01 $20 $01 $2A $33 ifn $02 $00 $F7 ifp $03 $00 $F7
> .tx $F0 $01 $20 $01 $2A $35 ifn $01 $00 $F7 ifp $00 $00 $F7
> .tx $F0 $01 $20 $01 $2A $38 ifn $01 $00 $F7 ifp $02 $00 $F7
> $end
> 
> Would that be a valid block?
> Would it do exactly the same as the block you suggested?

With my first .tx line (containing "val" and no "ifn"/"ifp") I was only trying to save some of your precious BCR preset memory...
But I did try my solution before I posted it, and it worked!
I've just tried your version too: as far as I can see it produces exactly same output.

One interesting difference is that your version never mentions "val", so your version's actual minmax range is irrelevant, except that the first value must be lower than the second: so ".minmax 0 1" or ".minmax 0 127" would work as well.

However, the "general structure" of your ".minmax" and ".default" statements is still crucial, because otherwise the ifn/ifp method won't work correctly.

For instance, with ".default 0" and ".minmax 0 0" (or WITHOUT default/minmax statements), the BCR can NEVER determine a direction, since the value remains 0, so (no matter how often you press the button) the BCR simply outputs the bytes of BOTH the ifn and ifp sections, which is of course totally undesired (in fact: it's invalid MIDI!).

The value of the ".default" statement determines the direction that the BCR detects when you FIRST press the button.
For instance, ".default 10" together with ".minmax 2 3" would lead to this:

1st press: the display shows "on", but internally there's a NEGATIVE jump (from 10 to 3), so the ifn section is output! Not what you want.

2nd press: display shows "off", but again there's a NEGATIVE jump (from 3 to 2), so again the ifn section is output!

3rd press: "on" and a POSITIVE jump (from 2 to 3), so the ifp section is output.

However, leaving out the default statement altogether would happen to go well in this case, because it would amount to setting the default to 0, so pressing the button for the first time would correctly lead to a positive jump (from 0 to 3).

> Shouldn't there be some delay time between the executions of the ".tx" 
> lines, so that the receiving synth can process the incoming data?

Interesting question.

I've never tested how the BCR behaves temporally when it sends output, but my guess is that it does NOT insert delays between subsequent MIDI (in particular SysEx) messages - probably it just outputs all bytes in a "dumb" manner.

It would be interesting if the BCR always inserts a delay between two ".tx" statements (i.e. between the last output byte resulting from one ".tx" statement and the first output byte resulting from the next ".tx" statement); however, I doubt that too.

You could try to build in a delay "manually" by including "dummy" MIDI messages in between two SysEx statements, but I'm not sure whether you would be doing the receiving synth a favor this way...

I do remember that older synths sometimes required long delays of 100-200 msec or so (after "big" changes like a mode switch etc.).
However, to achieve this amount of delay on the BCR, you would have to include an enormous amount of dummy messages in the button's definition (maybe you could use the BCL elemnt ".ntimes"?).

In any case I would only start worrying about delay issues when the synth indeed begins to show signs of skipping SysEx messages due to "time trouble".

Best wishes,
Mark.

Re: Script Editor - Appreciate your advice

2010-12-23 by gil.brand33

--- In bc2000@yahoogroups.com, "Mark" <markwinvdb@...> wrote:
>
> --- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@> wrote:
> > Does "ifp/ifn" corresponds to "On/Off" respectively? (Couldn't find that 
> > in the BCMI…)
> 
> Strictly speaking "ifp <something>" simply means "output <something> upon a positive value change".
> 
> For an ENCODER this can involve any positive jump between values within the range from min to max.
> 
> However, unless mode=increment/incval, a BUTTON's value only flips between its actual min and max, so in this case "ifp <something>" does mean "output <something> when the button switches to ON".
> (At least this is the case if you've used appropriate ".default" and ".minmax" statements: see below.)
> 
> > I reviewed section 14.3 in the BCMI, and I'm not quite sure how 
> > ".default" behaves under all possible scenarios…
> 
> Welcome to the club...
> 
> > Therefore, in order to `ignore' both ".default" & ".minmax" (to be on 
> > the safe side..), I was thinking of replacing only the first ".tx" line 
> > in your block, so that the whole block would look like this:
> > 
> > $rev R1
> > $button 4
> > .showvalue on
> > .default 2
> > .mode toggle
> > .minmax 2 3
> > .tx $F0 $01 $20 $01 $2A $33 ifn $02 $00 $F7 ifp $03 $00 $F7
> > .tx $F0 $01 $20 $01 $2A $35 ifn $01 $00 $F7 ifp $00 $00 $F7
> > .tx $F0 $01 $20 $01 $2A $38 ifn $01 $00 $F7 ifp $02 $00 $F7
> > $end
> > 
> > Would that be a valid block?
> > Would it do exactly the same as the block you suggested?
> 
> With my first .tx line (containing "val" and no "ifn"/"ifp") I was only trying to save some of your precious BCR preset memory...
> But I did try my solution before I posted it, and it worked!
> I've just tried your version too: as far as I can see it produces exactly same output.
> 
> One interesting difference is that your version never mentions "val", so your version's actual minmax range is irrelevant, except that the first value must be lower than the second: so ".minmax 0 1" or ".minmax 0 127" would work as well.
> 
> However, the "general structure" of your ".minmax" and ".default" statements is still crucial, because otherwise the ifn/ifp method won't work correctly.
> 
> For instance, with ".default 0" and ".minmax 0 0" (or WITHOUT default/minmax statements), the BCR can NEVER determine a direction, since the value remains 0, so (no matter how often you press the button) the BCR simply outputs the bytes of BOTH the ifn and ifp sections, which is of course totally undesired (in fact: it's invalid MIDI!).
> 
> The value of the ".default" statement determines the direction that the BCR detects when you FIRST press the button.
> For instance, ".default 10" together with ".minmax 2 3" would lead to this:
> 
> 1st press: the display shows "on", but internally there's a NEGATIVE jump (from 10 to 3), so the ifn section is output! Not what you want.
> 
> 2nd press: display shows "off", but again there's a NEGATIVE jump (from 3 to 2), so again the ifn section is output!
> 
> 3rd press: "on" and a POSITIVE jump (from 2 to 3), so the ifp section is output.
> 
> However, leaving out the default statement altogether would happen to go well in this case, because it would amount to setting the default to 0, so pressing the button for the first time would correctly lead to a positive jump (from 0 to 3).
> 
> > Shouldn't there be some delay time between the executions of the ".tx" 
> > lines, so that the receiving synth can process the incoming data?
> 
> Interesting question.
> 
> I've never tested how the BCR behaves temporally when it sends output, but my guess is that it does NOT insert delays between subsequent MIDI (in particular SysEx) messages - probably it just outputs all bytes in a "dumb" manner.
> 
> It would be interesting if the BCR always inserts a delay between two ".tx" statements (i.e. between the last output byte resulting from one ".tx" statement and the first output byte resulting from the next ".tx" statement); however, I doubt that too.
> 
> You could try to build in a delay "manually" by including "dummy" MIDI messages in between two SysEx statements, but I'm not sure whether you would be doing the receiving synth a favor this way...
> 
> I do remember that older synths sometimes required long delays of 100-200 msec or so (after "big" changes like a mode switch etc.).
> However, to achieve this amount of delay on the BCR, you would have to include an enormous amount of dummy messages in the button's definition (maybe you could use the BCL elemnt ".ntimes"?).
> 
> In any case I would only start worrying about delay issues when the synth indeed begins to show signs of skipping SysEx messages due to "time trouble".
> 
> Best wishes,
> Mark.
>


Thank you very much Mark.
Tried it out and it works fine. So Happy!
No timing issues so far (its a DSI PolyEvolver Keyboard...)

Regarding the usage of "val" in a ".tx" command:
I want to configure an encoder to send values of 30-250:
$encoder 1
.minmax 30 250
.default 60
.tx $F0 $01 $20 $01 $2A $42 <val> $F7
.resolution 96 96 96 96
.showvalue on
.mode bar


For my synth, "val" here should be 2-Byte long, for example:
If decimal value is 49 --> hex value is x31 and the ".tx" line (after splitting
MSB & LSB), should actually be:

.tx $F0 $01 $20 $01 $2A $42 $01 $03 $F7


For value of 164, which in hex is xA4, same line should be:

.tx $F0 $01 $20 $01 $2A $42 $04 $0A $F7


So, I need to split the "val" nibbles (val[0:7] and val[8:15]) and "pad" them with "zeroes"...

Would the following syntax work:
.tx $F0 $01 $20 $01 $2A $42 $0val0.7 $0val8.15 $F7


Cheers,
Gil

Re: Script Editor - Appreciate your advice

2010-12-23 by Mark

--- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@...> wrote:
> Regarding the usage of "val" in a ".tx" command:
> I want to configure an encoder to send values of 30-250:
> $encoder 1
> .minmax 30 250
> .default 60
> .tx $F0 $01 $20 $01 $2A $42 <val> $F7
> .resolution 96 96 96 96
> .showvalue on
> .mode bar
> 
> For my synth, "val" here should be 2-Byte long, for example:
> If decimal value is 49 --> hex value is x31 and the ".tx" line (after splitting
> MSB & LSB), should actually be:
> 
> .tx $F0 $01 $20 $01 $2A $42 $01 $03 $F7
> 
 
> For value of 164, which in hex is xA4, same line should be:
> 
> .tx $F0 $01 $20 $01 $2A $42 $04 $0A $F7
> 
> So, I need to split the "val" nibbles (val[0:7] and val[8:15]) and "pad" them with "zeroes"...
>

If I understand your intention correctly, you want to send the enocder value's bits 0-3 ("low nibble") as bits 0-3 of the first byte, and its bits 4-7 ("high nibble") as bits 0-3 of the second byte, with in both cases the output byte's bits 4-7 being 0.

> Would the following syntax work:
> .tx $F0 $01 $20 $01 $2A $42 $0val0.7 $0val8.15 $F7

I've never tried this, but I can't imagine that these concatenations of $0 plus "val..." work.
In any case you can't use "val0.7" or "val8.15"; these identifiers simply don't exist in BCL. (See BCMI section 14.6.1.)

Instead, try this:
.tx $F0 $01 $20 $01 $2A $42 val0.3 val4.7 $F7
Doesn't this achieve exactly what you want?

Hope this helps,
Mark.

Re: Script Editor - Appreciate your advice

2010-12-23 by gil.brand33

--- In bc2000@yahoogroups.com, "Mark" <markwinvdb@...> wrote:
>
> --- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@> wrote:
> > Regarding the usage of "val" in a ".tx" command:
> > I want to configure an encoder to send values of 30-250:
> > $encoder 1
> > .minmax 30 250
> > .default 60
> > .tx $F0 $01 $20 $01 $2A $42 <val> $F7
> > .resolution 96 96 96 96
> > .showvalue on
> > .mode bar
> > 
> > For my synth, "val" here should be 2-Byte long, for example:
> > If decimal value is 49 --> hex value is x31 and the ".tx" line (after splitting
> > MSB & LSB), should actually be:
> > 
> > .tx $F0 $01 $20 $01 $2A $42 $01 $03 $F7
> > 
>  
> > For value of 164, which in hex is xA4, same line should be:
> > 
> > .tx $F0 $01 $20 $01 $2A $42 $04 $0A $F7
> > 
> > So, I need to split the "val" nibbles (val[0:7] and val[8:15]) and "pad" them with "zeroes"...
> >
> 
> If I understand your intention correctly, you want to send the enocder value's bits 0-3 ("low nibble") as bits 0-3 of the first byte, and its bits 4-7 ("high nibble") as bits 0-3 of the second byte, with in both cases the output byte's bits 4-7 being 0.
> 
> > Would the following syntax work:
> > .tx $F0 $01 $20 $01 $2A $42 $0val0.7 $0val8.15 $F7
> 
> I've never tried this, but I can't imagine that these concatenations of $0 plus "val..." work.
> In any case you can't use "val0.7" or "val8.15"; these identifiers simply don't exist in BCL. (See BCMI section 14.6.1.)
> 
> Instead, try this:
> .tx $F0 $01 $20 $01 $2A $42 val0.3 val4.7 $F7
> Doesn't this achieve exactly what you want?
> 
> Hope this helps,
> Mark.
>

Yep, you got me right :)
And yep, it works!
I'm grateful.

My synth(midi out) is connected to the BCR(midi in), and the BCR(midi out B) is connected to my synth(midi in) [BCR mode is S-3]
Also, my synth is configured to continuously send Sysex messages of all its knobs/parameters.
Sorry for my ignorance, but if that encoder is now configured to "deal" with Sysex messages, how come a change on the relevant synth knob has no impact on the BCR's encoder's value? 

T  h  a  k  s  !
Gil

Re: Script Editor - Appreciate your advice

2010-12-24 by Mark

--- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@...> wrote:
> My synth(midi out) is connected to the BCR(midi in), and the BCR(midi out B) is connected to my synth(midi in) [BCR mode is S-3]
> Also, my synth is configured to continuously send Sysex messages of all its knobs/parameters.
> Sorry for my ignorance, but if that encoder is now configured to "deal" with Sysex messages, how come a change on the relevant synth knob has no impact on the BCR's encoder's value? 

The BCR's encoders and buttons only react to incoming MIDI messages relating to ".easypar" definitions, not to ".tx" definitions.
See BCMI p. 49.

Re: Script Editor - Appreciate your advice

2010-12-29 by gil.brand33

--- In bc2000@yahoogroups.com, "Mark" <markwinvdb@...> wrote:
>
> --- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@> wrote:
> > My synth(midi out) is connected to the BCR(midi in), and the BCR(midi out B) is connected to my synth(midi in) [BCR mode is S-3]
> > Also, my synth is configured to continuously send Sysex messages of all its knobs/parameters.
> > Sorry for my ignorance, but if that encoder is now configured to "deal" with Sysex messages, how come a change on the relevant synth knob has no impact on the BCR's encoder's value? 
> 
> The BCR's encoders and buttons only react to incoming MIDI messages relating to ".easypar" definitions, not to ".tx" definitions.
> See BCMI p. 49.
>


Thank you  v e r y  much Mark!
It all works smoothly. So much fan, and my PEK is powerful than ever!
I would like to backup my new BCR/BCF presets; They hold both regular configurations (CC) and special configurations (".tx").
If I dump the presets to SysEx files, would ALL information be saved (including ".tx") so that these presets can be fully recovered from my PC?

Cheers,
Gil

Re: Script Editor - Appreciate your advice

2010-12-29 by Mark

--- In bc2000@yahoogroups.com, "gil.brand33" <gil.brand33@...> wrote:
> I would like to backup my new BCR/BCF presets; They hold both regular configurations (CC) and special configurations (".tx").
> If I dump the presets to SysEx files, would ALL information be saved (including ".tx") so that these presets can be fully recovered from my PC?

If you are thinking about dumping preset data from the BCF/BCR themselves to the computer, there's only one piece of advice I can give you:
DON'T DO IT (unless you have no other version of your presets).
This is because the BCF and BCR dump preset data INCORRECTLY in several respects, particularly certain aspects of ".tx" statements.
See the BC Manager Manual, p. 30 (top), for more explanation of this problem (not just related to BC Manager).

If you're working with Royce's script editor, haven't you saved your presets as bc2 (text) files? Such files would be the safest "backup".

Converting a bc2 file (or a txt file, as created by BC Manager) to a syx file usually does NOT lose any data: data loss only occurs for non-ASCII ("international") characters above #127 (since a syx file can only contain data bytes <=127) - and these non-ASCII characters can only occur in comments anyway, so that's never a REAL problem.

So bc2, txt and syx can all function as source/backup:
there are several utilities to effortlessly switch from bc2/txt to syx or the other way around: BC-Convert, BC Manager or indeed Royce's script editor.

Hope this helps,
   Mark.

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.