--- /dev/null
+# improved stack functionality for DCT, by Shiar
+
+# 1.13.0 200411042045 - added swap and stack from main
+# - renamed to "stack"
+# - stack cycle would crash with undefined stack
+# 1.10.1 200410150045 - set initial value to prevent crash when no undos set
+# 1.10.0 200410150000 - single-level undo from main
+
+use strict;
+use warnings;
+
+my $undo = []; # stack backup
+my $stackpos = 0; # position of stack browser
+
+push @{$hook{preaction}}, sub {
+ if ($_[0] >= 0) {
+ $undo = [@stack]; # backup stack
+ $stackpos = 0; # reset position of stack navigation
+ } # stack-modifying operations (type>=0)
+}; # preaction
+
+$action{undo} = [-1, sub { ($undo, @stack) = ([@stack], @$undo) }]; # undo/redo
+
+$action{swap} = [ 2, sub { reverse @_ }]; # swap x<->y
+
+$action{stack} = [-2, sub {
+ $stackpos %= @stack if @stack; # cycle
+ $val{i} = $stack[$stackpos++];
+}]; # stack
+
+return {
+ author => "Shiar",
+ title => "stack functions",
+ version => "1.13",
+};
+