ardour.git
6 years agoUse precalulated value rather than recalculating
Len Ovens [Wed, 21 Mar 2018 22:31:23 +0000 (15:31 -0700)]
Use precalulated value rather than recalculating

6 years agoOSC: Setting strip types should clear temporary custom modes
Len Ovens [Wed, 21 Mar 2018 21:50:27 +0000 (14:50 -0700)]
OSC: Setting strip types should clear temporary custom modes

6 years agoFix VstParameterProperties (bug from ac03e4a93)
Robin Gareus [Fri, 6 Apr 2018 22:16:57 +0000 (00:16 +0200)]
Fix VstParameterProperties (bug from ac03e4a93)

This fixes VST parameter prop.flags (toggle, integer-step).
VestigeMaxLabelLen is used in various places in libardour, most notably
with effGetParamName.

6 years agoImplement VST UI touch (begin/end Edit)
Robin Gareus [Mon, 2 Apr 2018 20:33:11 +0000 (22:33 +0200)]
Implement VST UI touch (begin/end Edit)

6 years agolots of changes including: ability to store and recall more than one mixer state...
Nikolaus Gullotta [Thu, 29 Mar 2018 15:21:09 +0000 (10:21 -0500)]
lots of changes including: ability to store and recall more than one mixer state, ability to work on selected tracks only, plus bugfixes and removal of redundant checks

6 years agoFix a French translation
Julien "_FrnchFrgg_" RIVAUD [Fri, 30 Mar 2018 18:52:48 +0000 (20:52 +0200)]
Fix a French translation

It conveyed the idea of continuous silencing as long as the transport
is in a stopped state. Make it correctly mean a one-shot reset when the
transport is being stopped.

6 years agoCoreAudio/MIDI: add locks for port-registration
Robin Gareus [Thu, 29 Mar 2018 16:15:20 +0000 (18:15 +0200)]
CoreAudio/MIDI: add locks for port-registration

CoreMIDI ports are dynamic. When dis/connecting a device CoreAudio's
AudioHardware-PropertyListener triggers a callback which can
add/remove ports.

This can not happen concurrently with processing, but it may happen
concurrently with a user creating tracks using Ardour's UI
and/or session-load/setup.

6 years agofix undo/redo for duplicate-regions in ripple mode
Paul Davis [Wed, 28 Mar 2018 18:24:15 +0000 (14:24 -0400)]
fix undo/redo for duplicate-regions in ripple mode

Also fix duplicate of multiple regions in the same track, and change "gap" variable
name to "span" for greater clarity

6 years agoNO-OP: prefer binary OR to set midi-status byte
Robin Gareus [Tue, 27 Mar 2018 22:32:32 +0000 (00:32 +0200)]
NO-OP: prefer binary OR to set midi-status byte

6 years agoSparse update for granular controls on sliders
Robin Gareus [Tue, 27 Mar 2018 22:13:30 +0000 (00:13 +0200)]
Sparse update for granular controls on sliders

Don't call ::set_value() if the actual value has not changed.
e.g. MIDI-CC or integer controls. Moving the Bar-controller was able to
create events even though the actual value remained unchanged.

This check has to be done UI-side, since the underlying API is also used
for state-restore and automation. e.g.
"old value" (user-set) may be default "0", "new value" may also be "0" but
libardour still needs to send an event (a synth's internal state may not
default to "0")

6 years agoduplicate (regions) should honor ripple edit mode
Paul Davis [Tue, 27 Mar 2018 14:17:33 +0000 (10:17 -0400)]
duplicate (regions) should honor ripple edit mode

6 years agoRemove debug message and trailing whitespace
Robin Gareus [Tue, 27 Mar 2018 13:30:34 +0000 (15:30 +0200)]
Remove debug message and trailing whitespace

6 years agofaderport: make ::invoke() tell us whether or not something was actually invoked...
Paul Davis [Mon, 26 Mar 2018 22:26:39 +0000 (18:26 -0400)]
faderport: make ::invoke() tell us whether or not something was actually invoked for a button event

Only put the button into "consumed" if it actually invoked something.
This helps to get reverse-polarity footswitches to work as expected

6 years agofix binding to long-press for User button on FaderPort
Paul Davis [Mon, 26 Mar 2018 17:56:50 +0000 (13:56 -0400)]
fix binding to long-press for User button on FaderPort

6 years agoFix MIDI-port info in plugin-manager
Robin Gareus [Sat, 24 Mar 2018 19:05:17 +0000 (20:05 +0100)]
Fix MIDI-port info in plugin-manager

6 years agoassert(rv) removed, fixed redundant checking, and fixed proc ordering issue caused...
Nikolaus Gullotta [Fri, 23 Mar 2018 14:00:51 +0000 (09:00 -0500)]
assert(rv) removed, fixed redundant checking, and fixed proc ordering issue caused by commit c7f7347

6 years agobetter group support + mute and solo recall
Nikolaus Gullotta [Wed, 21 Mar 2018 16:52:21 +0000 (11:52 -0500)]
better group support + mute and solo recall

6 years agoMSVC won't allow us to cast directly from float to an enum. We need to kludge it...
John Emmas [Thu, 22 Mar 2018 10:54:21 +0000 (10:54 +0000)]
MSVC won't allow us to cast directly from float to an enum. We need to kludge it by first casting to an integer type

(is it safe to be casting from float to enum anyway??)

6 years agoOSC: Change custom mode to enum
Len Ovens [Tue, 20 Mar 2018 21:37:08 +0000 (14:37 -0700)]
OSC: Change custom mode to enum

6 years agomore stability fixes
Nikolaus Gullotta [Tue, 20 Mar 2018 20:41:20 +0000 (15:41 -0500)]
more stability fixes

6 years agofixed processor ordering crash in ardour and added group support (kinda)
Nikolaus Gullotta [Tue, 20 Mar 2018 18:01:48 +0000 (13:01 -0500)]
fixed processor ordering crash in ardour and added group support (kinda)

6 years agoFix call to labs.
Robin Gareus [Tue, 20 Mar 2018 18:16:37 +0000 (19:16 +0100)]
Fix call to labs.

..or as clang puts it:
"error: no member named 'labs' in namespace 'std'; did you mean
 simply 'labs'?"

6 years agoFix crash when re-assigning groups to a disjunct set.
Robin Gareus [Tue, 20 Mar 2018 17:07:55 +0000 (18:07 +0100)]
Fix crash when re-assigning groups to a disjunct set.

Drag a group-tab's right-edge horizontally to the right to remove all
current routes from the groups before adding new routes to the group.

The group becomes temporarily empty, and
Session::route_removed_from_route_group() removes the group (before new
routes can be added).

6 years agoOSC: a strip controlling a send should deactivate other controls
Len Ovens [Tue, 20 Mar 2018 15:41:06 +0000 (08:41 -0700)]
OSC: a strip controlling a send should deactivate other controls

6 years agoOSC: Add feedback for bus_only mode and automation and pan
Len Ovens [Sun, 18 Mar 2018 06:10:16 +0000 (23:10 -0700)]
OSC: Add feedback for bus_only mode and automation and pan

6 years agoOSC: select should have latch too.
Len Ovens [Sun, 18 Mar 2018 06:07:44 +0000 (23:07 -0700)]
OSC: select should have latch too.

6 years agoOSC: Add bus only mode for gain controls
Len Ovens [Sat, 17 Mar 2018 18:00:59 +0000 (11:00 -0700)]
OSC: Add bus only mode for gain controls

6 years agoFixed issue in plugin id invalidator caused by commit d5d5c0c
Nikolaus Gullotta [Mon, 19 Mar 2018 18:30:19 +0000 (13:30 -0500)]
Fixed issue in plugin id invalidator caused by commit d5d5c0c

6 years agocleanup, fix in-on-change issue.
Nikolaus Gullotta [Mon, 19 Mar 2018 17:24:46 +0000 (12:24 -0500)]
cleanup, fix in-on-change issue.

6 years agoLua is not an acronym
Robin Gareus [Mon, 19 Mar 2018 17:18:35 +0000 (18:18 +0100)]
Lua is not an acronym

6 years agoSpeed up plugin-selector refill.
Robin Gareus [Mon, 19 Mar 2018 17:13:37 +0000 (18:13 +0100)]
Speed up plugin-selector refill.

* Detach model from treeview and disable sorting during refill.
* Prevent multiple re-fills due to sensitivity updates of ComboBoxes:
  gtk_widget_set_sensitive() -> CairoWidget::on_state_changed ()
  -> CairoWidget::set_visual_state () ->  StateChanged Signal

6 years agoFix "Shortcut" special-case in the script-selector.
Robin Gareus [Mon, 19 Mar 2018 14:43:07 +0000 (15:43 +0100)]
Fix "Shortcut" special-case in the script-selector.

The Script-selector is used in various places, not just for
Action-scripts.

Also add a "--" prefix for the separator to avoid name conflicts with
actual script names.

6 years agoLua: Lock bindings into memory for rt-scripts
Robin Gareus [Mon, 19 Mar 2018 01:26:24 +0000 (02:26 +0100)]
Lua: Lock bindings into memory for rt-scripts

Empirically this decreases gc-spike duration (worst-case) by a factor of
two and speeds up the average gc-run by a factor of over 4 (depending
on the amount of memory used by the plugin).

6 years agoCustomize Lua GC, add object-memory-lock API.
Robin Gareus [Mon, 19 Mar 2018 00:33:13 +0000 (01:33 +0100)]
Customize Lua GC, add object-memory-lock API.

Add custom API to prevent Lua Objects from being garbage collected.
This is intended to for Ardour LuaBridge bindings (~1MB Objects:
tables, functions and userdata).
The bindings are persistent and the gc can skip them in mark & sweep
phases. This is a significant performance improvement for garbage
collection.

Note. The next version of Lua (5.4) will come with a generational-gc
rather than an incremental, so extending the API at this point in time
is acceptable.

6 years agoExample Lua script to perform action at specific wallclock time
Robin Gareus [Sun, 18 Mar 2018 14:56:06 +0000 (15:56 +0100)]
Example Lua script to perform action at specific wallclock time

6 years agoFix midi track mapping on pt import
Damien Zammit [Sun, 18 Mar 2018 00:39:53 +0000 (11:39 +1100)]
Fix midi track mapping on pt import

6 years agoRemove calls to deprecated Lua bitlib
Robin Gareus [Sat, 17 Mar 2018 20:13:06 +0000 (21:13 +0100)]
Remove calls to deprecated Lua bitlib

6 years agoRemove another C++11 construct (local struct) from UI code
Robin Gareus [Sat, 17 Mar 2018 19:00:08 +0000 (20:00 +0100)]
Remove another C++11 construct (local struct) from UI code

6 years agoRemove C++11isms (libptformat)
Robin Gareus [Sat, 17 Mar 2018 18:59:38 +0000 (19:59 +0100)]
Remove C++11isms (libptformat)

6 years agoFix wrong "_nth_" replacement in ba202cc09
Robin Gareus [Sat, 17 Mar 2018 17:17:25 +0000 (18:17 +0100)]
Fix wrong "_nth_" replacement in ba202cc09

6 years agoDon't alter, use and rely on selection for PT import
Robin Gareus [Sat, 17 Mar 2018 16:32:29 +0000 (17:32 +0100)]
Don't alter, use and rely on selection for PT import

6 years agoNO-OP: C++ify code
Robin Gareus [Sat, 17 Mar 2018 16:21:21 +0000 (17:21 +0100)]
NO-OP: C++ify code

* remove typdef for struct
* Remove {} struct initializer, use a dedicated c'tor
* scope variables

6 years agoNO-OP: whitespace
Robin Gareus [Sat, 17 Mar 2018 16:15:44 +0000 (17:15 +0100)]
NO-OP: whitespace

* distinguish comments and commented-out-code
* add space after function, before bracket

6 years agoPT import: Use multitrack MIDI import support based on ptformat update
Damien Zammit [Sat, 17 Mar 2018 11:41:44 +0000 (22:41 +1100)]
PT import: Use multitrack MIDI import support based on ptformat update

6 years agoptformat: Update to upstream master 4e653041
Damien Zammit [Sat, 17 Mar 2018 11:40:16 +0000 (22:40 +1100)]
ptformat: Update to upstream master 4e653041

- Better MIDI support

6 years agoStartup Dialog: A change to the monitor selection should trigger a write to config.
Ben Loftis [Fri, 16 Mar 2018 21:34:09 +0000 (16:34 -0500)]
Startup Dialog: A change to the monitor selection should trigger a write to config.

6 years agoadd support to reinstantiate deleted plugins
Nikolaus Gullotta [Fri, 16 Mar 2018 16:11:54 +0000 (11:11 -0500)]
add support to reinstantiate deleted plugins

6 years agoNO-OP: Convert Spaces to Tabs
Nikolaus Gullotta [Thu, 15 Mar 2018 18:36:25 +0000 (13:36 -0500)]
NO-OP: Convert Spaces to Tabs

6 years agodescription changes and stop jumping instructions if proc:isnil()
Nikolaus Gullotta [Wed, 14 Mar 2018 19:51:37 +0000 (14:51 -0500)]
description changes and stop jumping instructions if proc:isnil()

6 years agoExpose a few more PluginInsert methods to Lua
Robin Gareus [Fri, 16 Mar 2018 14:33:56 +0000 (15:33 +0100)]
Expose a few more PluginInsert methods to Lua

6 years agoGUI: create_vca() API change
Robin Gareus [Thu, 15 Mar 2018 19:25:14 +0000 (20:25 +0100)]
GUI: create_vca() API change

6 years agoVCA API-change: return created VCAs (handy for Lua scripts)
Robin Gareus [Thu, 15 Mar 2018 19:24:53 +0000 (20:24 +0100)]
VCA API-change: return created VCAs (handy for Lua scripts)

6 years agore-add plugin bypass state and move proc order writing closer to top
Nikolaus Gullotta [Wed, 14 Mar 2018 14:58:56 +0000 (09:58 -0500)]
re-add plugin bypass state and move proc order writing closer to top

6 years agoI said, LESS ugly, not more :)
Nikolaus Gullotta [Tue, 13 Mar 2018 19:51:47 +0000 (14:51 -0500)]
I said, LESS ugly, not more :)

6 years agoNow recalls plug-in ordering (also looks a bit less ugly hopefully?
Nikolaus Gullotta [Tue, 13 Mar 2018 19:26:27 +0000 (14:26 -0500)]
Now recalls plug-in ordering (also looks a bit less ugly hopefully?

6 years agoAdd Midnam for Roland TB-03
7890 [Sun, 4 Feb 2018 09:10:00 +0000 (10:10 +0100)]
Add Midnam for Roland TB-03

Named controllers according to MIDI implementation chart.
https://www.roland.com/global/support/by_product/tb-03/

6 years agoSort generic-midi bindings alphabetically
Robin Gareus [Tue, 13 Mar 2018 15:17:31 +0000 (16:17 +0100)]
Sort generic-midi bindings alphabetically

6 years agoNovation LaunchKey 49 bindings from Michael McLeod
Robin Gareus [Tue, 13 Mar 2018 14:55:33 +0000 (15:55 +0100)]
Novation LaunchKey 49 bindings from Michael McLeod

6 years agoSame for midi input enable button
Len Ovens [Tue, 13 Mar 2018 15:05:41 +0000 (08:05 -0700)]
Same for midi input enable button

6 years agoTrim and vca button should also be insensitive in strip aux mode
Len Ovens [Mon, 12 Mar 2018 23:02:45 +0000 (16:02 -0700)]
Trim and vca button should also be insensitive in strip aux mode

6 years agoOSC: group commands should feedback all off if no group
Len Ovens [Sat, 10 Mar 2018 21:58:31 +0000 (13:58 -0800)]
OSC: group commands should feedback all off if no group

6 years agoInitial checkin of mixer store script
Nikolaus Gullotta [Mon, 12 Mar 2018 20:31:33 +0000 (15:31 -0500)]
Initial checkin of mixer store script

6 years agoTweak logic in master-bus packing to make it clearer; will also minimize conflicts...
Ben Loftis [Sun, 11 Mar 2018 19:42:00 +0000 (14:42 -0500)]
Tweak logic in master-bus packing to make it clearer; will also minimize conflicts with Mixbus.

6 years agoOSC: fix /strip/hidden feedback excess
Len Ovens [Sat, 10 Mar 2018 21:06:17 +0000 (13:06 -0800)]
OSC: fix /strip/hidden feedback excess

6 years agoOSC: change group sharing to individual commands
Len Ovens [Sat, 10 Mar 2018 20:58:14 +0000 (12:58 -0800)]
OSC: change group sharing to individual commands
Send less feedback for group name and sharing

6 years agoOSC: set surface should reset custom mode
Len Ovens [Wed, 7 Mar 2018 20:36:56 +0000 (12:36 -0800)]
OSC: set surface should reset custom mode

6 years agoOSC: Display only strips controlled by selected VCA
Len Ovens [Wed, 7 Mar 2018 20:20:30 +0000 (12:20 -0800)]
OSC: Display only strips controlled by selected VCA

6 years agoOSC: add set VCA for slavable strip
Len Ovens [Wed, 7 Mar 2018 18:41:07 +0000 (10:41 -0800)]
OSC: add set VCA for slavable strip

6 years agoOSC: Added slaved feedback to select
Len Ovens [Wed, 7 Mar 2018 17:38:38 +0000 (09:38 -0800)]
OSC: Added slaved feedback to select

6 years agoAdd virtual slaved, slaved_to calls to stripable
Len Ovens [Wed, 7 Mar 2018 16:49:57 +0000 (08:49 -0800)]
Add virtual slaved, slaved_to calls to stripable

6 years agoOSC: check route exists
Len Ovens [Sun, 4 Mar 2018 23:46:09 +0000 (15:46 -0800)]
OSC: check route exists

6 years agoSafeguard against possibly invalid peak-requests
Robin Gareus [Wed, 7 Mar 2018 23:37:54 +0000 (00:37 +0100)]
Safeguard against possibly invalid peak-requests

It may happen that WaveView requests a range that is larger than
the data on disk.

If start > _length, cnt becomes negative and the function will throw
or segfault.

6 years agoAllow loadfile in non-rt scripts
Robin Gareus [Tue, 6 Mar 2018 20:46:35 +0000 (21:46 +0100)]
Allow loadfile in non-rt scripts

6 years agoInitial check in of EditorHook script transparent_regions.lua
Nikolaus Gullotta [Tue, 6 Mar 2018 16:45:55 +0000 (10:45 -0600)]
Initial check in of EditorHook script transparent_regions.lua

6 years agogeneric_midi: add proper handling of midi controll toggles
Jan Lentfer [Sat, 3 Mar 2018 13:04:12 +0000 (14:04 +0100)]
generic_midi: add proper handling of midi controll toggles

6 years agoUnrecognized plugins are stored in the tagfile (FromPlug); but only set the user_set...
Ben Loftis [Fri, 2 Mar 2018 23:35:18 +0000 (17:35 -0600)]
Unrecognized plugins are stored in the tagfile (FromPlug); but only set the user_set flag if the user actually edited it.

6 years agoAllow successive changes from the Gui to set tags.
Ben Loftis [Fri, 2 Mar 2018 21:57:58 +0000 (15:57 -0600)]
Allow successive changes from the Gui to set tags.

6 years agoRemove interpolation unit-test (fails to compile)
Robin Gareus [Fri, 2 Mar 2018 15:13:37 +0000 (16:13 +0100)]
Remove interpolation unit-test (fails to compile)

Ardour vari-speed does no longer use ARDOUR::CubicInterpolation
and LinearInterpolation was removed.
vari-speed is now using zita-resampler.

6 years agoFix gcc-4.2 OSX/PPC builds
Robin Gareus [Fri, 2 Mar 2018 15:11:21 +0000 (16:11 +0100)]
Fix gcc-4.2 OSX/PPC builds

ambiguity between
  reverse_iterator rend();
  const_reverse_iterator rend() const;

6 years agoTag_reset() should be FromPlug, not FromGui.
Ben Loftis [Fri, 2 Mar 2018 00:26:09 +0000 (18:26 -0600)]
Tag_reset() should be FromPlug, not FromGui.

6 years agoFix thinko in prior commit 7c5f1c.
Ben Loftis [Thu, 1 Mar 2018 15:09:50 +0000 (09:09 -0600)]
Fix thinko in prior commit 7c5f1c.

6 years agoPlugin-Tag improvements:
Ben Loftis [Thu, 1 Mar 2018 14:59:48 +0000 (08:59 -0600)]
Plugin-Tag improvements:
 Initialize LADSPA tags.
 Explicitly define behavior of tags provided by plugin, factory, or user.
 Store the plugin name in the tag-file, for easier user-submissions and bulk editing.

6 years agoYet another spelling mistake fix
Robin Gareus [Wed, 28 Feb 2018 19:48:49 +0000 (20:48 +0100)]
Yet another spelling mistake fix

6 years agoFix a typo in session-utils (thanks to IOhannes/debian for reporting)
Robin Gareus [Wed, 28 Feb 2018 19:02:13 +0000 (20:02 +0100)]
Fix a typo in session-utils (thanks to IOhannes/debian for reporting)

6 years agoFix a typo (thanks to IOhannes/debian for reporting)
Robin Gareus [Wed, 28 Feb 2018 19:02:01 +0000 (20:02 +0100)]
Fix a typo (thanks to IOhannes/debian for reporting)

6 years agoFix some GUI typos (thanks to IOhannes/debian for reporting)
Robin Gareus [Wed, 28 Feb 2018 19:01:11 +0000 (20:01 +0100)]
Fix some GUI typos (thanks to IOhannes/debian for reporting)

6 years agoOSC: add group sharing bit feedback
Len Ovens [Wed, 28 Feb 2018 04:55:30 +0000 (20:55 -0800)]
OSC: add group sharing bit feedback

6 years agoOSC: add group sharing bit setting
Len Ovens [Tue, 27 Feb 2018 19:55:49 +0000 (11:55 -0800)]
OSC: add group sharing bit setting

6 years agoOSC: display only strips in group.
Len Ovens [Tue, 27 Feb 2018 19:15:08 +0000 (11:15 -0800)]
OSC: display only strips in group.

6 years agoImplement grid line colors ( was: measure lines ). This restores measure lines to...
Ben Loftis [Tue, 27 Feb 2018 22:39:49 +0000 (16:39 -0600)]
Implement grid line colors ( was: measure lines ). This restores measure lines to a brighter color than beats.

6 years agoReinstate the ability to split regions while dragging playhead. I think this was...
Ben Loftis [Tue, 27 Feb 2018 19:08:40 +0000 (13:08 -0600)]
Reinstate the ability to split regions while dragging playhead.  I think this was unintentionally lost.

6 years agoRemove some redundant calls to snap_to(). get_preferred_edit_position() already...
Ben Loftis [Tue, 27 Feb 2018 14:55:17 +0000 (08:55 -0600)]
Remove some redundant calls to snap_to().  get_preferred_edit_position() already did it.

6 years agoShould be able to Split in range mode, with a selected track.
Ben Loftis [Tue, 27 Feb 2018 02:38:50 +0000 (20:38 -0600)]
Should be able to Split in range mode, with a selected track.

6 years agoFix bug: sequential pasting to the same time, but different tracks, would trigger...
Ben Loftis [Tue, 27 Feb 2018 01:40:24 +0000 (19:40 -0600)]
Fix bug: sequential pasting to the same time, but different tracks, would trigger paste offset.

6 years agoSwitch CDFrame grid to use MinSec ruler rather than Sample ruler.
Ben Loftis [Tue, 27 Feb 2018 00:52:28 +0000 (18:52 -0600)]
Switch CDFrame grid to use MinSec ruler rather than Sample ruler.

6 years agoRename SMPTE enum back to Timecode.
Ben Loftis [Tue, 27 Feb 2018 00:38:18 +0000 (18:38 -0600)]
Rename SMPTE enum back to Timecode.

6 years agoFix a rather large naming thinko: GridTypeSamples should be CDFrames.
Ben Loftis [Mon, 26 Feb 2018 23:02:24 +0000 (17:02 -0600)]
Fix a rather large naming thinko: GridTypeSamples should be CDFrames.

6 years agoAdd missing checkbox: Snap to Marker.
Ben Loftis [Mon, 26 Feb 2018 21:52:06 +0000 (15:52 -0600)]
Add missing checkbox: Snap to Marker.

6 years agoSnap-to-grid should not invalidate other snap options. This was a leftover behavior...
Ben Loftis [Sat, 24 Feb 2018 16:53:03 +0000 (10:53 -0600)]
Snap-to-grid should not invalidate other snap options. This was a leftover behavior from prior iterations of Snap+Grid.

6 years agoFixes for region_boundary_cache:
Ben Loftis [Sat, 24 Feb 2018 16:30:52 +0000 (10:30 -0600)]
Fixes for region_boundary_cache:
 If no region-snaps are defined, bail out before generating cache.
 Avoid potential overflow at max_samplepos+1
 Snap should continue to work beyond the End marker.