diff options
author | Norbert Preining <preining@logic.at> | 2008-11-17 08:27:32 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2008-11-17 08:27:32 +0000 |
commit | 9d6afc59622c9ae2797be582216b34b80dd8b5f0 (patch) | |
tree | 1039c8a0a18d65e4a62ea5150e4a998030289d7d /Master/tlpkg/installer | |
parent | 0886d623dad2fb5b016b88c461e5b8e8e771cc06 (diff) |
adding stuff to installer perl to get progress bars working
git-svn-id: svn://tug.org/texlive/trunk@11327 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/installer')
199 files changed, 9579 insertions, 0 deletions
diff --git a/Master/tlpkg/installer/perllib/Text/Tabs.pm b/Master/tlpkg/installer/perllib/Text/Tabs.pm new file mode 100644 index 00000000000..36107fcfe3e --- /dev/null +++ b/Master/tlpkg/installer/perllib/Text/Tabs.pm @@ -0,0 +1,121 @@ + +package Text::Tabs; + +require Exporter; + +@ISA = (Exporter); +@EXPORT = qw(expand unexpand $tabstop); + +use vars qw($VERSION $tabstop $debug); +$VERSION = 2005.0824; + +use strict; + +BEGIN { + $tabstop = 8; + $debug = 0; +} + +sub expand { + my @l; + my $pad; + for ( @_ ) { + my $s = ''; + for (split(/^/m, $_, -1)) { + my $offs = 0; + s{\t}{ + $pad = $tabstop - (pos() + $offs) % $tabstop; + $offs += $pad - 1; + " " x $pad; + }eg; + $s .= $_; + } + push(@l, $s); + } + return @l if wantarray; + return $l[0]; +} + +sub unexpand +{ + my (@l) = @_; + my @e; + my $x; + my $line; + my @lines; + my $lastbit; + for $x (@l) { + @lines = split("\n", $x, -1); + for $line (@lines) { + $line = expand($line); + @e = split(/(.{$tabstop})/,$line,-1); + $lastbit = pop(@e); + $lastbit = '' unless defined $lastbit; + $lastbit = "\t" + if $lastbit eq " "x$tabstop; + for $_ (@e) { + if ($debug) { + my $x = $_; + $x =~ s/\t/^I\t/gs; + print "sub on '$x'\n"; + } + s/ +$/\t/; + } + $line = join('',@e, $lastbit); + } + $x = join("\n", @lines); + } + return @l if wantarray; + return $l[0]; +} + +1; +__END__ + +sub expand +{ + my (@l) = @_; + for $_ (@l) { + 1 while s/(^|\n)([^\t\n]*)(\t+)/ + $1. $2 . (" " x + ($tabstop * length($3) + - (length($2) % $tabstop))) + /sex; + } + return @l if wantarray; + return $l[0]; +} + + +=head1 NAME + +Text::Tabs -- expand and unexpand tabs per the unix expand(1) and unexpand(1) + +=head1 SYNOPSIS + + use Text::Tabs; + + $tabstop = 4; + @lines_without_tabs = expand(@lines_with_tabs); + @lines_with_tabs = unexpand(@lines_without_tabs); + +=head1 DESCRIPTION + +Text::Tabs does about what the unix utilities expand(1) and unexpand(1) +do. Given a line with tabs in it, expand will replace the tabs with +the appropriate number of spaces. Given a line with or without tabs in +it, unexpand will add tabs when it can save bytes by doing so. Invisible +compression with plain ascii! + +=head1 BUGS + +expand doesn't handle newlines very quickly -- do not feed it an +entire document in one string. Instead feed it an array of lines. + +=head1 LICENSE + +Copyright (C) 1996-2002,2005 David Muir Sharnoff. +Copyright (C) 2005 Aristotle Pagaltzis +This module may be modified, used, copied, and redistributed at your own risk. +Publicly redistributed modified versions must use a different name. + diff --git a/Master/tlpkg/installer/perllib/Tie/Watch.pm b/Master/tlpkg/installer/perllib/Tie/Watch.pm new file mode 100644 index 00000000000..48f46acd2b0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tie/Watch.pm @@ -0,0 +1,560 @@ +$Tie::Watch::VERSION = '1.2'; + +package Tie::Watch; + +=head1 NAME + + Tie::Watch - place watchpoints on Perl variables. + +=head1 SYNOPSIS + + use Tie::Watch; + + $watch = Tie::Watch->new( + -variable => \$frog, + -debug => 1, + -shadow => 0, + -fetch => [\&fetch, 'arg1', 'arg2', ..., 'argn'], + -store => \&store, + -destroy => sub {print "Final value=$frog.\n"}, + } + %vinfo = $watch->Info; + $args = $watch->Args(-fetch); + $val = $watch->Fetch; + print "val=", $watch->Say($val), ".\n"; + $watch->Store('Hello'); + $watch->Unwatch; + +=head1 DESCRIPTION + +This class module binds one or more subroutines of your devising to a +Perl variable. All variables can have B<FETCH>, B<STORE> and +B<DESTROY> callbacks. Additionally, arrays can define B<CLEAR>, +B<DELETE>, B<EXISTS>, B<EXTEND>, B<FETCHSIZE>, B<POP>, B<PUSH>, +B<SHIFT>, B<SPLICE>, B<STORESIZE> and B<UNSHIFT> callbacks, and hashes +can define B<CLEAR>, B<DELETE>, B<EXISTS>, B<FIRSTKEY> and B<NEXTKEY> +callbacks. If these term are unfamiliar to you, I I<really> suggest +you read L<perltie>. + +With Tie::Watch you can: + + . alter a variable's value + . prevent a variable's value from being changed + . invoke a Perl/Tk callback when a variable changes + . trace references to a variable + +Callback format is patterned after the Perl/Tk scheme: supply either a +code reference, or, supply an array reference and pass the callback +code reference in the first element of the array, followed by callback +arguments. (See examples in the Synopsis, above.) + +Tie::Watch provides default callbacks for any that you fail to +specify. Other than negatively impacting performance, they perform +the standard action that you'd expect, so the variable behaves +"normally". Once you override a default callback, perhaps to insert +debug code like print statements, your callback normally finishes by +calling the underlying (overridden) method. But you don't have to! + +To map a tied method name to a default callback name simply lowercase +the tied method name and uppercase its first character. So FETCH +becomes Fetch, NEXTKEY becomes Nextkey, etcetera. + +Here are two callbacks for a scalar. The B<FETCH> (read) callback does +nothing other than illustrate the fact that it returns the value to +assign the variable. The B<STORE> (write) callback uppercases the +variable and returns it. In all cases the callback I<must> return the +correct read or write value - typically, it does this by invoking the +underlying method. + + my $fetch_scalar = sub { + my($self) = @_; + $self->Fetch; + }; + + my $store_scalar = sub { + my($self, $new_val) = @_; + $self->Store(uc $new_val); + }; + +Here are B<FETCH> and B<STORE> callbacks for either an array or hash. +They do essentially the same thing as the scalar callbacks, but +provide a little more information. + + my $fetch = sub { + my($self, $key) = @_; + my $val = $self->Fetch($key); + print "In fetch callback, key=$key, val=", $self->Say($val); + my $args = $self->Args(-fetch); + print ", args=('", join("', '", @$args), "')" if $args; + print ".\n"; + $val; + }; + + my $store = sub { + my($self, $key, $new_val) = @_; + my $val = $self->Fetch($key); + $new_val = uc $new_val; + $self->Store($key, $new_val); + print "In store callback, key=$key, val=", $self->Say($val), + ", new_val=", $self->Say($new_val); + my $args = $self->Args(-store); + print ", args=('", join("', '", @$args), "')" if $args; + print ".\n"; + $new_val; + }; + +In all cases, the first parameter is a reference to the Watch object, +used to invoke the following class methods. + +=head1 METHODS + +=over 4 + +=item $watch = Tie::Watch->new(-options => values); + +The watchpoint constructor method that accepts option/value pairs to +create and configure the Watch object. The only required option is +B<-variable>. + +B<-variable> is a I<reference> to a scalar, array or hash variable. + +B<-debug> (default 0) is 1 to activate debug print statements internal +to Tie::Watch. + +B<-shadow> (default 1) is 0 to disable array and hash shadowing. To +prevent infinite recursion Tie::Watch maintains parallel variables for +arrays and hashes. When the watchpoint is created the parallel shadow +variable is initialized with the watched variable's contents, and when +the watchpoint is deleted the shadow variable is copied to the original +variable. Thus, changes made during the watch process are not lost. +Shadowing is on my default. If you disable shadowing any changes made +to an array or hash are lost when the watchpoint is deleted. + +Specify any of the following relevant callback parameters, in the +format described above: B<-fetch>, B<-store>, B<-destroy>. +Additionally for arrays: B<-clear>, B<-extend>, B<-fetchsize>, +B<-pop>, B<-push>, B<-shift>, B<-splice>, B<-storesize> and +B<-unshift>. Additionally for hashes: B<-clear>, B<-delete>, +B<-exists>, B<-firstkey> and B<-nextkey>. + +=item $args = $watch->Args(-fetch); + +Returns a reference to a list of arguments for the specified callback, +or undefined if none. + +=item $watch->Fetch(); $watch->Fetch($key); + +Returns a variable's current value. $key is required for an array or +hash. + +=item %vinfo = $watch->Info(); + +Returns a hash detailing the internals of the Watch object, with these +keys: + + %vinfo = { + -variable => SCALAR(0x200737f8) + -debug => '0' + -shadow => '1' + -value => 'HELLO SCALAR' + -destroy => ARRAY(0x200f86cc) + -fetch => ARRAY(0x200f8558) + -store => ARRAY(0x200f85a0) + -legible => above data formatted as a list of string, for printing + } + +For array and hash Watch objects, the B<-value> key is replaced with a +B<-ptr> key which is a reference to the parallel array or hash. +Additionally, for an array or hash, there are key/value pairs for +all the variable specific callbacks. + +=item $watch->Say($val); + +Used mainly for debugging, it returns $val in quotes if required, or +the string "undefined" for undefined values. + +=item $watch->Store($new_val); $watch->Store($key, $new_val); + +Store a variable's new value. $key is required for an array or hash. + +=item $watch->Unwatch(); + +Stop watching the variable. + +=back + +=head1 EFFICIENCY CONSIDERATIONS + +If you can live using the class methods provided, please do so. You +can meddle with the object hash directly and improved watch +performance, at the risk of your code breaking in the future. + +=head1 AUTHOR + +Stephen O. Lidie + +=head1 HISTORY + + lusol@Lehigh.EDU, LUCC, 96/05/30 + . Original version 0.92 release, based on the Trace module from Hans Mulder, + and ideas from Tim Bunce. + + lusol@Lehigh.EDU, LUCC, 96/12/25 + . Version 0.96, release two inner references detected by Perl 5.004. + + lusol@Lehigh.EDU, LUCC, 97/01/11 + . Version 0.97, fix Makefile.PL and MANIFEST (thanks Andreas Koenig). + Make sure test.pl doesn't fail if Tk isn't installed. + + Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 97/10/03 + . Version 0.98, implement -shadow option for arrays and hashes. + + Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 98/02/11 + . Version 0.99, finally, with Perl 5.004_57, we can completely watch arrays. + With tied array support this module is essentially complete, so its been + optimized for speed at the expense of clarity - sorry about that. The + Delete() method has been renamed Unwatch() because it conflicts with the + builtin delete(). + + Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 99/04/04 + . Version 1.0, for Perl 5.005_03, update Makefile.PL for ActiveState, and + add two examples (one for Perl/Tk). + + sol0@lehigh.edu, Lehigh University Computing Center, 2003/06/07 + . Version 1.1, for Perl 5.8, can trace a reference now, patch from Slaven + Rezic. + + sol0@lehigh.edu, Lehigh University Computing Center, 2005/05/17 + . Version 1.2, for Perl 5.8, per Rob Seegel's suggestion, support array + DELETE and EXISTS. + +=head1 COPYRIGHT + +Copyright (C) 1996 - 2005 Stephen O. Lidie. All rights reserved. + +This program is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. + +=cut + +use 5.004_57;; +use Carp; +use strict; +use subs qw/normalize_callbacks/; +use vars qw/@array_callbacks @hash_callbacks @scalar_callbacks/; + +@array_callbacks = qw/-clear -delete -destroy -exists -extend -fetch + -fetchsize -pop -push -shift -splice -store + -storesize -unshift/; +@hash_callbacks = qw/-clear -delete -destroy -exists -fetch -firstkey + -nextkey -store/; +@scalar_callbacks = qw/-destroy -fetch -store/; + +sub new { + + # Watch constructor. The *real* constructor is Tie::Watch->base_watch(), + # invoked by methods in other Watch packages, depending upon the variable's + # type. Here we supply defaulted parameter values and then verify them, + # normalize all callbacks and bind the variable to the appropriate package. + + my($class, %args) = @_; + my $version = $Tie::Watch::VERSION; + my (%arg_defaults) = (-debug => 0, -shadow => 1); + my $variable = $args{-variable}; + croak "Tie::Watch::new(): -variable is required." if not defined $variable; + + my($type, $watch_obj) = (ref $variable, undef); + if ($type =~ /(SCALAR|REF)/) { + @arg_defaults{@scalar_callbacks} = ( + [\&Tie::Watch::Scalar::Destroy], [\&Tie::Watch::Scalar::Fetch], + [\&Tie::Watch::Scalar::Store]); + } elsif ($type =~ /ARRAY/) { + @arg_defaults{@array_callbacks} = ( + [\&Tie::Watch::Array::Clear], [\&Tie::Watch::Array::Delete], + [\&Tie::Watch::Array::Destroy], [\&Tie::Watch::Array::Exists], + [\&Tie::Watch::Array::Extend], [\&Tie::Watch::Array::Fetch], + [\&Tie::Watch::Array::Fetchsize], [\&Tie::Watch::Array::Pop], + [\&Tie::Watch::Array::Push], [\&Tie::Watch::Array::Shift], + [\&Tie::Watch::Array::Splice], [\&Tie::Watch::Array::Store], + [\&Tie::Watch::Array::Storesize], [\&Tie::Watch::Array::Unshift]); + } elsif ($type =~ /HASH/) { + @arg_defaults{@hash_callbacks} = ( + [\&Tie::Watch::Hash::Clear], [\&Tie::Watch::Hash::Delete], + [\&Tie::Watch::Hash::Destroy], [\&Tie::Watch::Hash::Exists], + [\&Tie::Watch::Hash::Fetch], [\&Tie::Watch::Hash::Firstkey], + [\&Tie::Watch::Hash::Nextkey], [\&Tie::Watch::Hash::Store]); + } else { + croak "Tie::Watch::new() - not a variable reference."; + } + my(@margs, %ahsh, $args, @args); + @margs = grep ! defined $args{$_}, keys %arg_defaults; + %ahsh = %args; # argument hash + @ahsh{@margs} = @arg_defaults{@margs}; # fill in missing values + normalize_callbacks \%ahsh; + + if ($type =~ /(SCALAR|REF)/) { + $watch_obj = tie $$variable, 'Tie::Watch::Scalar', %ahsh; + } elsif ($type =~ /ARRAY/) { + $watch_obj = tie @$variable, 'Tie::Watch::Array', %ahsh; + } elsif ($type =~ /HASH/) { + $watch_obj = tie %$variable, 'Tie::Watch::Hash', %ahsh; + } + $watch_obj; + +} # end new, Watch constructor + +sub Args { + + # Return a reference to a list of callback arguments, or undef if none. + # + # $_[0] = self + # $_[1] = callback type + + defined $_[0]->{$_[1]}->[1] ? [@{$_[0]->{$_[1]}}[1 .. $#{$_[0]->{$_[1]}}]] + : undef; + +} # end Args + +sub Info { + + # Info() method subclassed by other Watch modules. + # + # $_[0] = self + # @_[1 .. $#_] = optional callback types + + my(%vinfo, @results); + my(@info) = (qw/-variable -debug -shadow/); + push @info, @_[1 .. $#_] if scalar @_ >= 2; + foreach my $type (@info) { + push @results, sprintf('%-10s: ', substr $type, 1) . + $_[0]->Say($_[0]->{$type}); + $vinfo{$type} = $_[0]->{$type}; + } + $vinfo{-legible} = [@results]; + %vinfo; + +} # end Info + +sub Say { + + # For debugging, mainly. + # + # $_[0] = self + # $_[1] = value + + defined $_[1] ? (ref($_[1]) ne '' ? $_[1] : "'$_[1]'") : "undefined"; + +} # end Say + +sub Unwatch { + + # Stop watching a variable by releasing the last reference and untieing it. + # Update the original variable with its shadow, if appropriate. + # + # $_[0] = self + + my $variable = $_[0]->{-variable}; + my $type = ref $variable; + my $copy = $_[0]->{-ptr} if $type !~ /(SCALAR|REF)/; + my $shadow = $_[0]->{-shadow}; + undef $_[0]; + if ($type =~ /(SCALAR|REF)/) { + untie $$variable; + } elsif ($type =~ /ARRAY/) { + untie @$variable; + @$variable = @$copy if $shadow; + } elsif ($type =~ /HASH/) { + untie %$variable; + %$variable = %$copy if $shadow; + } else { + croak "Tie::Watch::Delete() - not a variable reference."; + } + +} # end Unwatch + +# Watch private methods. + +sub base_watch { + + # Watch base class constructor invoked by other Watch modules. + + my($class, %args) = @_; + my $watch_obj = {%args}; + $watch_obj; + +} # end base_watch + +sub callback { + + # Execute a Watch callback, either the default or user specified. + # Note that the arguments are those supplied by the tied method, + # not those (if any) specified by the user when the watch object + # was instantiated. This is for performance reasons, and why the + # Args() method exists. + # + # $_[0] = self + # $_[1] = callback type + # $_[2] through $#_ = tied arguments + + &{$_[0]->{$_[1]}->[0]} ($_[0], @_[2 .. $#_]); + +} # end callback + +sub normalize_callbacks { + + # Ensure all callbacks are normalized in [\&code, @args] format. + + my($args_ref) = @_; + my($cb, $ref); + foreach my $arg (keys %$args_ref) { + next if $arg =~ /variable|debug|shadow/; + $cb = $args_ref->{$arg}; + $ref = ref $cb; + if ($ref =~ /CODE/) { + $args_ref->{$arg} = [$cb]; + } elsif ($ref !~ /ARRAY/) { + croak "Tie::Watch: malformed callback $arg=$cb."; + } + } + +} # end normalize_callbacks + +############################################################################### + +package Tie::Watch::Scalar; + +use Carp; +@Tie::Watch::Scalar::ISA = qw/Tie::Watch/; + +sub TIESCALAR { + + my($class, %args) = @_; + my $variable = $args{-variable}; + my $watch_obj = Tie::Watch->base_watch(%args); + $watch_obj->{-value} = $$variable; + print "WatchScalar new: $variable created, \@_=", join(',', @_), "!\n" + if $watch_obj->{-debug}; + bless $watch_obj, $class; + +} # end TIESCALAR + +sub Info {$_[0]->SUPER::Info('-value', @Tie::Watch::scalar_callbacks)} + +# Default scalar callbacks. + +sub Destroy {undef %{$_[0]}} +sub Fetch {$_[0]->{-value}} +sub Store {$_[0]->{-value} = $_[1]} + +# Scalar access methods. + +sub DESTROY {$_[0]->callback('-destroy')} +sub FETCH {$_[0]->callback('-fetch')} +sub STORE {$_[0]->callback('-store', $_[1])} + +############################################################################### + +package Tie::Watch::Array; + +use Carp; +@Tie::Watch::Array::ISA = qw/Tie::Watch/; + +sub TIEARRAY { + + my($class, %args) = @_; + my($variable, $shadow) = @args{-variable, -shadow}; + my @copy = @$variable if $shadow; # make a private copy of user's array + $args{-ptr} = $shadow ? \@copy : []; + my $watch_obj = Tie::Watch->base_watch(%args); + print "WatchArray new: $variable created, \@_=", join(',', @_), "!\n" + if $watch_obj->{-debug}; + bless $watch_obj, $class; + +} # end TIEARRAY + +sub Info {$_[0]->SUPER::Info('-ptr', @Tie::Watch::array_callbacks)} + +# Default array callbacks. + +sub Clear {$_[0]->{-ptr} = ()} +sub Delete {delete $_[0]->{-ptr}->[$_[1]]} +sub Destroy {undef %{$_[0]}} +sub Exists {exists $_[0]->{-ptr}->[$_[1]]} +sub Extend {} +sub Fetch {$_[0]->{-ptr}->[$_[1]]} +sub Fetchsize {scalar @{$_[0]->{-ptr}}} +sub Pop {pop @{$_[0]->{-ptr}}} +sub Push {push @{$_[0]->{-ptr}}, @_[1 .. $#_]} +sub Shift {shift @{$_[0]->{-ptr}}} +sub Splice { + my $n = scalar @_; # splice() is wierd! + return splice @{$_[0]->{-ptr}}, $_[1] if $n == 2; + return splice @{$_[0]->{-ptr}}, $_[1], $_[2] if $n == 3; + return splice @{$_[0]->{-ptr}}, $_[1], $_[2], @_[3 .. $#_] if $n >= 4; +} +sub Store {$_[0]->{-ptr}->[$_[1]] = $_[2]} +sub Storesize {$#{$_[0]->{-ptr}} = $_[1] - 1} +sub Unshift {unshift @{$_[0]->{-ptr}}, @_[1 .. $#_]} + +# Array access methods. + +sub CLEAR {$_[0]->callback('-clear')} +sub DELETE {$_[0]->callback('-delete', $_[1])} +sub DESTROY {$_[0]->callback('-destroy')} +sub EXISTS {$_[0]->callback('-exists', $_[1])} +sub EXTEND {$_[0]->callback('-extend', $_[1])} +sub FETCH {$_[0]->callback('-fetch', $_[1])} +sub FETCHSIZE {$_[0]->callback('-fetchsize')} +sub POP {$_[0]->callback('-pop')} +sub PUSH {$_[0]->callback('-push', @_[1 .. $#_])} +sub SHIFT {$_[0]->callback('-shift')} +sub SPLICE {$_[0]->callback('-splice', @_[1 .. $#_])} +sub STORE {$_[0]->callback('-store', $_[1], $_[2])} +sub STORESIZE {$_[0]->callback('-storesize', $_[1])} +sub UNSHIFT {$_[0]->callback('-unshift', @_[1 .. $#_])} + +############################################################################### + +package Tie::Watch::Hash; + +use Carp; +@Tie::Watch::Hash::ISA = qw/Tie::Watch/; + +sub TIEHASH { + + my($class, %args) = @_; + my($variable, $shadow) = @args{-variable, -shadow}; + my %copy = %$variable if $shadow; # make a private copy of user's hash + $args{-ptr} = $shadow ? \%copy : {}; + my $watch_obj = Tie::Watch->base_watch(%args); + print "WatchHash new: $variable created, \@_=", join(',', @_), "!\n" + if $watch_obj->{-debug}; + bless $watch_obj, $class; + +} # end TIEHASH + +sub Info {$_[0]->SUPER::Info('-ptr', @Tie::Watch::hash_callbacks)} + +# Default hash callbacks. + +sub Clear {$_[0]->{-ptr} = ()} +sub Delete {delete $_[0]->{-ptr}->{$_[1]}} +sub Destroy {undef %{$_[0]}} +sub Exists {exists $_[0]->{-ptr}->{$_[1]}} +sub Fetch {$_[0]->{-ptr}->{$_[1]}} +sub Firstkey {my $c = keys %{$_[0]->{-ptr}}; each %{$_[0]->{-ptr}}} +sub Nextkey {each %{$_[0]->{-ptr}}} +sub Store {$_[0]->{-ptr}->{$_[1]} = $_[2]} + +# Hash access methods. + +sub CLEAR {$_[0]->callback('-clear')} +sub DELETE {$_[0]->callback('-delete', $_[1])} +sub DESTROY {$_[0]->callback('-destroy')} +sub EXISTS {$_[0]->callback('-exists', $_[1])} +sub FETCH {$_[0]->callback('-fetch', $_[1])} +sub FIRSTKEY {$_[0]->callback('-firstkey')} +sub NEXTKEY {$_[0]->callback('-nextkey')} +sub STORE {$_[0]->callback('-store', $_[1], $_[2])} + +1; diff --git a/Master/tlpkg/installer/perllib/Tk/Canvas.pm b/Master/tlpkg/installer/perllib/Tk/Canvas.pm new file mode 100644 index 00000000000..210bc30bfc2 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Canvas.pm @@ -0,0 +1,1436 @@ +package Tk::Canvas; +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #12 $ =~ /\D(\d+)\s*$/; + +use Tk qw($XS_VERSION); + +use base qw(Tk::Widget); +Construct Tk::Widget 'Canvas'; + +bootstrap Tk::Canvas; + +sub Tk_cmd { \&Tk::canvas } + +Tk::Methods('addtag','bbox','bind','canvasx','canvasy','coords','create', + 'dchars','delete','dtag','find','focus','gettags','icursor', + 'index','insert','itemcget','itemconfigure','lower','move', + 'postscript','raise','scale','scan','select','type','xview','yview'); + +use Tk::Submethods ( 'create' => [qw(arc bitmap grid group image line oval + polygon rectangle text window)], + 'scan' => [qw(mark dragto)], + 'select' => [qw(from clear item to)], + 'xview' => [qw(moveto scroll)], + 'yview' => [qw(moveto scroll)], + ); + +*CanvasBind = \&Tk::bind; +*CanvasFocus = \&Tk::focus; + +sub ClassInit +{ + my ($class,$mw) = @_; + $mw->XYscrollBind($class); + return $class; +} + +sub BalloonInfo +{ + my ($canvas,$balloon,$X,$Y,@opt) = @_; + my @tags = ($canvas->find('withtag', 'current'),$canvas->gettags('current')); + foreach my $opt (@opt) + { + my $info = $balloon->GetOption($opt,$canvas); + if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'HASH')) + { + $balloon->Subclient($tags[0]); + foreach my $tag (@tags) + { + return $info->{$tag} if exists $info->{$tag}; + } + return ''; + } + return $info; + } +} + +sub get_corners +{ + my $c = shift; + my(@xview) = $c->xview; + my(@yview) = $c->yview; + my(@scrollregion) = @{$c->cget(-scrollregion)}; + return ( + $xview[0] * ($scrollregion[2]-$scrollregion[0]) + $scrollregion[0], + $yview[0] * ($scrollregion[3]-$scrollregion[1]) + $scrollregion[1], + $xview[1] * ($scrollregion[2]-$scrollregion[0]) + $scrollregion[0], + $yview[1] * ($scrollregion[3]-$scrollregion[1]) + $scrollregion[1], + ); +} + +# List of adobe glyph names. Converted from glyphlist.txt, downloaded +# from Adobe + +$Tk::psglyphs = {qw( + 0020 space + 0021 exclam + 0022 quotedbl + 0023 numbersign + 0024 dollar + 0025 percent + 0026 ampersand + 0027 quotesingle + 0028 parenleft + 0029 parenright + 002A asterisk + 002B plus + 002C comma + 002D hyphen + 002E period + 002F slash + 0030 zero + 0031 one + 0032 two + 0033 three + 0034 four + 0035 five + 0036 six + 0037 seven + 0038 eight + 0039 nine + 003A colon + 003B semicolon + 003C less + 003D equal + 003E greater + 003F question + 0040 at + 0041 A + 0042 B + 0043 C + 0044 D + 0045 E + 0046 F + 0047 G + 0048 H + 0049 I + 004A J + 004B K + 004C L + 004D M + 004E N + 004F O + 0050 P + 0051 Q + 0052 R + 0053 S + 0054 T + 0055 U + 0056 V + 0057 W + 0058 X + 0059 Y + 005A Z + 005B bracketleft + 005C backslash + 005D bracketright + 005E asciicircum + 005F underscore + 0060 grave + 0061 a + 0062 b + 0063 c + 0064 d + 0065 e + 0066 f + 0067 g + 0068 h + 0069 i + 006A j + 006B k + 006C l + 006D m + 006E n + 006F o + 0070 p + 0071 q + 0072 r + 0073 s + 0074 t + 0075 u + 0076 v + 0077 w + 0078 x + 0079 y + 007A z + 007B braceleft + 007C bar + 007D braceright + 007E asciitilde + 00A0 space + 00A1 exclamdown + 00A2 cent + 00A3 sterling + 00A4 currency + 00A5 yen + 00A6 brokenbar + 00A7 section + 00A8 dieresis + 00A9 copyright + 00AA ordfeminine + 00AB guillemotleft + 00AC logicalnot + 00AD hyphen + 00AE registered + 00AF macron + 00B0 degree + 00B1 plusminus + 00B2 twosuperior + 00B3 threesuperior + 00B4 acute + 00B5 mu + 00B6 paragraph + 00B7 periodcentered + 00B8 cedilla + 00B9 onesuperior + 00BA ordmasculine + 00BB guillemotright + 00BC onequarter + 00BD onehalf + 00BE threequarters + 00BF questiondown + 00C0 Agrave + 00C1 Aacute + 00C2 Acircumflex + 00C3 Atilde + 00C4 Adieresis + 00C5 Aring + 00C6 AE + 00C7 Ccedilla + 00C8 Egrave + 00C9 Eacute + 00CA Ecircumflex + 00CB Edieresis + 00CC Igrave + 00CD Iacute + 00CE Icircumflex + 00CF Idieresis + 00D0 Eth + 00D1 Ntilde + 00D2 Ograve + 00D3 Oacute + 00D4 Ocircumflex + 00D5 Otilde + 00D6 Odieresis + 00D7 multiply + 00D8 Oslash + 00D9 Ugrave + 00DA Uacute + 00DB Ucircumflex + 00DC Udieresis + 00DD Yacute + 00DE Thorn + 00DF germandbls + 00E0 agrave + 00E1 aacute + 00E2 acircumflex + 00E3 atilde + 00E4 adieresis + 00E5 aring + 00E6 ae + 00E7 ccedilla + 00E8 egrave + 00E9 eacute + 00EA ecircumflex + 00EB edieresis + 00EC igrave + 00ED iacute + 00EE icircumflex + 00EF idieresis + 00F0 eth + 00F1 ntilde + 00F2 ograve + 00F3 oacute + 00F4 ocircumflex + 00F5 otilde + 00F6 odieresis + 00F7 divide + 00F8 oslash + 00F9 ugrave + 00FA uacute + 00FB ucircumflex + 00FC udieresis + 00FD yacute + 00FE thorn + 00FF ydieresis + 0100 Amacron + 0101 amacron + 0102 Abreve + 0103 abreve + 0104 Aogonek + 0105 aogonek + 0106 Cacute + 0107 cacute + 0108 Ccircumflex + 0109 ccircumflex + 010A Cdotaccent + 010B cdotaccent + 010C Ccaron + 010D ccaron + 010E Dcaron + 010F dcaron + 0110 Dcroat + 0111 dcroat + 0112 Emacron + 0113 emacron + 0114 Ebreve + 0115 ebreve + 0116 Edotaccent + 0117 edotaccent + 0118 Eogonek + 0119 eogonek + 011A Ecaron + 011B ecaron + 011C Gcircumflex + 011D gcircumflex + 011E Gbreve + 011F gbreve + 0120 Gdotaccent + 0121 gdotaccent + 0122 Gcommaaccent + 0123 gcommaaccent + 0124 Hcircumflex + 0125 hcircumflex + 0126 Hbar + 0127 hbar + 0128 Itilde + 0129 itilde + 012A Imacron + 012B imacron + 012C Ibreve + 012D ibreve + 012E Iogonek + 012F iogonek + 0130 Idotaccent + 0131 dotlessi + 0132 IJ + 0133 ij + 0134 Jcircumflex + 0135 jcircumflex + 0136 Kcommaaccent + 0137 kcommaaccent + 0138 kgreenlandic + 0139 Lacute + 013A lacute + 013B Lcommaaccent + 013C lcommaaccent + 013D Lcaron + 013E lcaron + 013F Ldot + 0140 ldot + 0141 Lslash + 0142 lslash + 0143 Nacute + 0144 nacute + 0145 Ncommaaccent + 0146 ncommaaccent + 0147 Ncaron + 0148 ncaron + 0149 napostrophe + 014A Eng + 014B eng + 014C Omacron + 014D omacron + 014E Obreve + 014F obreve + 0150 Ohungarumlaut + 0151 ohungarumlaut + 0152 OE + 0153 oe + 0154 Racute + 0155 racute + 0156 Rcommaaccent + 0157 rcommaaccent + 0158 Rcaron + 0159 rcaron + 015A Sacute + 015B sacute + 015C Scircumflex + 015D scircumflex + 015E Scedilla + 015F scedilla + 0160 Scaron + 0161 scaron + 0162 Tcommaaccent + 0163 tcommaaccent + 0164 Tcaron + 0165 tcaron + 0166 Tbar + 0167 tbar + 0168 Utilde + 0169 utilde + 016A Umacron + 016B umacron + 016C Ubreve + 016D ubreve + 016E Uring + 016F uring + 0170 Uhungarumlaut + 0171 uhungarumlaut + 0172 Uogonek + 0173 uogonek + 0174 Wcircumflex + 0175 wcircumflex + 0176 Ycircumflex + 0177 ycircumflex + 0178 Ydieresis + 0179 Zacute + 017A zacute + 017B Zdotaccent + 017C zdotaccent + 017D Zcaron + 017E zcaron + 017F longs + 0192 florin + 01A0 Ohorn + 01A1 ohorn + 01AF Uhorn + 01B0 uhorn + 01E6 Gcaron + 01E7 gcaron + 01FA Aringacute + 01FB aringacute + 01FC AEacute + 01FD aeacute + 01FE Oslashacute + 01FF oslashacute + 0218 Scommaaccent + 0219 scommaaccent + 021A Tcommaaccent + 021B tcommaaccent + 02BC afii57929 + 02BD afii64937 + 02C6 circumflex + 02C7 caron + 02C9 macron + 02D8 breve + 02D9 dotaccent + 02DA ring + 02DB ogonek + 02DC tilde + 02DD hungarumlaut + 0300 gravecomb + 0301 acutecomb + 0303 tildecomb + 0309 hookabovecomb + 0323 dotbelowcomb + 0384 tonos + 0385 dieresistonos + 0386 Alphatonos + 0387 anoteleia + 0388 Epsilontonos + 0389 Etatonos + 038A Iotatonos + 038C Omicrontonos + 038E Upsilontonos + 038F Omegatonos + 0390 iotadieresistonos + 0391 Alpha + 0392 Beta + 0393 Gamma + 0394 Delta + 0395 Epsilon + 0396 Zeta + 0397 Eta + 0398 Theta + 0399 Iota + 039A Kappa + 039B Lambda + 039C Mu + 039D Nu + 039E Xi + 039F Omicron + 03A0 Pi + 03A1 Rho + 03A3 Sigma + 03A4 Tau + 03A5 Upsilon + 03A6 Phi + 03A7 Chi + 03A8 Psi + 03A9 Omega + 03AA Iotadieresis + 03AB Upsilondieresis + 03AC alphatonos + 03AD epsilontonos + 03AE etatonos + 03AF iotatonos + 03B0 upsilondieresistonos + 03B1 alpha + 03B2 beta + 03B3 gamma + 03B4 delta + 03B5 epsilon + 03B6 zeta + 03B7 eta + 03B8 theta + 03B9 iota + 03BA kappa + 03BB lambda + 03BC mu + 03BD nu + 03BE xi + 03BF omicron + 03C0 pi + 03C1 rho + 03C2 sigma1 + 03C3 sigma + 03C4 tau + 03C5 upsilon + 03C6 phi + 03C7 chi + 03C8 psi + 03C9 omega + 03CA iotadieresis + 03CB upsilondieresis + 03CC omicrontonos + 03CD upsilontonos + 03CE omegatonos + 03D1 theta1 + 03D2 Upsilon1 + 03D5 phi1 + 03D6 omega1 + 0401 afii10023 + 0402 afii10051 + 0403 afii10052 + 0404 afii10053 + 0405 afii10054 + 0406 afii10055 + 0407 afii10056 + 0408 afii10057 + 0409 afii10058 + 040A afii10059 + 040B afii10060 + 040C afii10061 + 040E afii10062 + 040F afii10145 + 0410 afii10017 + 0411 afii10018 + 0412 afii10019 + 0413 afii10020 + 0414 afii10021 + 0415 afii10022 + 0416 afii10024 + 0417 afii10025 + 0418 afii10026 + 0419 afii10027 + 041A afii10028 + 041B afii10029 + 041C afii10030 + 041D afii10031 + 041E afii10032 + 041F afii10033 + 0420 afii10034 + 0421 afii10035 + 0422 afii10036 + 0423 afii10037 + 0424 afii10038 + 0425 afii10039 + 0426 afii10040 + 0427 afii10041 + 0428 afii10042 + 0429 afii10043 + 042A afii10044 + 042B afii10045 + 042C afii10046 + 042D afii10047 + 042E afii10048 + 042F afii10049 + 0430 afii10065 + 0431 afii10066 + 0432 afii10067 + 0433 afii10068 + 0434 afii10069 + 0435 afii10070 + 0436 afii10072 + 0437 afii10073 + 0438 afii10074 + 0439 afii10075 + 043A afii10076 + 043B afii10077 + 043C afii10078 + 043D afii10079 + 043E afii10080 + 043F afii10081 + 0440 afii10082 + 0441 afii10083 + 0442 afii10084 + 0443 afii10085 + 0444 afii10086 + 0445 afii10087 + 0446 afii10088 + 0447 afii10089 + 0448 afii10090 + 0449 afii10091 + 044A afii10092 + 044B afii10093 + 044C afii10094 + 044D afii10095 + 044E afii10096 + 044F afii10097 + 0451 afii10071 + 0452 afii10099 + 0453 afii10100 + 0454 afii10101 + 0455 afii10102 + 0456 afii10103 + 0457 afii10104 + 0458 afii10105 + 0459 afii10106 + 045A afii10107 + 045B afii10108 + 045C afii10109 + 045E afii10110 + 045F afii10193 + 0462 afii10146 + 0463 afii10194 + 0472 afii10147 + 0473 afii10195 + 0474 afii10148 + 0475 afii10196 + 0490 afii10050 + 0491 afii10098 + 04D9 afii10846 + 05B0 afii57799 + 05B1 afii57801 + 05B2 afii57800 + 05B3 afii57802 + 05B4 afii57793 + 05B5 afii57794 + 05B6 afii57795 + 05B7 afii57798 + 05B8 afii57797 + 05B9 afii57806 + 05BB afii57796 + 05BC afii57807 + 05BD afii57839 + 05BE afii57645 + 05BF afii57841 + 05C0 afii57842 + 05C1 afii57804 + 05C2 afii57803 + 05C3 afii57658 + 05D0 afii57664 + 05D1 afii57665 + 05D2 afii57666 + 05D3 afii57667 + 05D4 afii57668 + 05D5 afii57669 + 05D6 afii57670 + 05D7 afii57671 + 05D8 afii57672 + 05D9 afii57673 + 05DA afii57674 + 05DB afii57675 + 05DC afii57676 + 05DD afii57677 + 05DE afii57678 + 05DF afii57679 + 05E0 afii57680 + 05E1 afii57681 + 05E2 afii57682 + 05E3 afii57683 + 05E4 afii57684 + 05E5 afii57685 + 05E6 afii57686 + 05E7 afii57687 + 05E8 afii57688 + 05E9 afii57689 + 05EA afii57690 + 05F0 afii57716 + 05F1 afii57717 + 05F2 afii57718 + 060C afii57388 + 061B afii57403 + 061F afii57407 + 0621 afii57409 + 0622 afii57410 + 0623 afii57411 + 0624 afii57412 + 0625 afii57413 + 0626 afii57414 + 0627 afii57415 + 0628 afii57416 + 0629 afii57417 + 062A afii57418 + 062B afii57419 + 062C afii57420 + 062D afii57421 + 062E afii57422 + 062F afii57423 + 0630 afii57424 + 0631 afii57425 + 0632 afii57426 + 0633 afii57427 + 0634 afii57428 + 0635 afii57429 + 0636 afii57430 + 0637 afii57431 + 0638 afii57432 + 0639 afii57433 + 063A afii57434 + 0640 afii57440 + 0641 afii57441 + 0642 afii57442 + 0643 afii57443 + 0644 afii57444 + 0645 afii57445 + 0646 afii57446 + 0647 afii57470 + 0648 afii57448 + 0649 afii57449 + 064A afii57450 + 064B afii57451 + 064C afii57452 + 064D afii57453 + 064E afii57454 + 064F afii57455 + 0650 afii57456 + 0651 afii57457 + 0652 afii57458 + 0660 afii57392 + 0661 afii57393 + 0662 afii57394 + 0663 afii57395 + 0664 afii57396 + 0665 afii57397 + 0666 afii57398 + 0667 afii57399 + 0668 afii57400 + 0669 afii57401 + 066A afii57381 + 066D afii63167 + 0679 afii57511 + 067E afii57506 + 0686 afii57507 + 0688 afii57512 + 0691 afii57513 + 0698 afii57508 + 06A4 afii57505 + 06AF afii57509 + 06BA afii57514 + 06D2 afii57519 + 06D5 afii57534 + 1E80 Wgrave + 1E81 wgrave + 1E82 Wacute + 1E83 wacute + 1E84 Wdieresis + 1E85 wdieresis + 1EF2 Ygrave + 1EF3 ygrave + 200C afii61664 + 200D afii301 + 200E afii299 + 200F afii300 + 2012 figuredash + 2013 endash + 2014 emdash + 2015 afii00208 + 2017 underscoredbl + 2018 quoteleft + 2019 quoteright + 201A quotesinglbase + 201B quotereversed + 201C quotedblleft + 201D quotedblright + 201E quotedblbase + 2020 dagger + 2021 daggerdbl + 2022 bullet + 2024 onedotenleader + 2025 twodotenleader + 2026 ellipsis + 202C afii61573 + 202D afii61574 + 202E afii61575 + 2030 perthousand + 2032 minute + 2033 second + 2039 guilsinglleft + 203A guilsinglright + 203C exclamdbl + 2044 fraction + 2070 zerosuperior + 2074 foursuperior + 2075 fivesuperior + 2076 sixsuperior + 2077 sevensuperior + 2078 eightsuperior + 2079 ninesuperior + 207D parenleftsuperior + 207E parenrightsuperior + 207F nsuperior + 2080 zeroinferior + 2081 oneinferior + 2082 twoinferior + 2083 threeinferior + 2084 fourinferior + 2085 fiveinferior + 2086 sixinferior + 2087 seveninferior + 2088 eightinferior + 2089 nineinferior + 208D parenleftinferior + 208E parenrightinferior + 20A1 colonmonetary + 20A3 franc + 20A4 lira + 20A7 peseta + 20AA afii57636 + 20AB dong + 20AC Euro + 2105 afii61248 + 2111 Ifraktur + 2113 afii61289 + 2116 afii61352 + 2118 weierstrass + 211C Rfraktur + 211E prescription + 2122 trademark + 2126 Omega + 212E estimated + 2135 aleph + 2153 onethird + 2154 twothirds + 215B oneeighth + 215C threeeighths + 215D fiveeighths + 215E seveneighths + 2190 arrowleft + 2191 arrowup + 2192 arrowright + 2193 arrowdown + 2194 arrowboth + 2195 arrowupdn + 21A8 arrowupdnbse + 21B5 carriagereturn + 21D0 arrowdblleft + 21D1 arrowdblup + 21D2 arrowdblright + 21D3 arrowdbldown + 21D4 arrowdblboth + 2200 universal + 2202 partialdiff + 2203 existential + 2205 emptyset + 2206 Delta + 2207 gradient + 2208 element + 2209 notelement + 220B suchthat + 220F product + 2211 summation + 2212 minus + 2215 fraction + 2217 asteriskmath + 2219 periodcentered + 221A radical + 221D proportional + 221E infinity + 221F orthogonal + 2220 angle + 2227 logicaland + 2228 logicalor + 2229 intersection + 222A union + 222B integral + 2234 therefore + 223C similar + 2245 congruent + 2248 approxequal + 2260 notequal + 2261 equivalence + 2264 lessequal + 2265 greaterequal + 2282 propersubset + 2283 propersuperset + 2284 notsubset + 2286 reflexsubset + 2287 reflexsuperset + 2295 circleplus + 2297 circlemultiply + 22A5 perpendicular + 22C5 dotmath + 2302 house + 2310 revlogicalnot + 2320 integraltp + 2321 integralbt + 2329 angleleft + 232A angleright + 2500 SF100000 + 2502 SF110000 + 250C SF010000 + 2510 SF030000 + 2514 SF020000 + 2518 SF040000 + 251C SF080000 + 2524 SF090000 + 252C SF060000 + 2534 SF070000 + 253C SF050000 + 2550 SF430000 + 2551 SF240000 + 2552 SF510000 + 2553 SF520000 + 2554 SF390000 + 2555 SF220000 + 2556 SF210000 + 2557 SF250000 + 2558 SF500000 + 2559 SF490000 + 255A SF380000 + 255B SF280000 + 255C SF270000 + 255D SF260000 + 255E SF360000 + 255F SF370000 + 2560 SF420000 + 2561 SF190000 + 2562 SF200000 + 2563 SF230000 + 2564 SF470000 + 2565 SF480000 + 2566 SF410000 + 2567 SF450000 + 2568 SF460000 + 2569 SF400000 + 256A SF540000 + 256B SF530000 + 256C SF440000 + 2580 upblock + 2584 dnblock + 2588 block + 258C lfblock + 2590 rtblock + 2591 ltshade + 2592 shade + 2593 dkshade + 25A0 filledbox + 25A1 H22073 + 25AA H18543 + 25AB H18551 + 25AC filledrect + 25B2 triagup + 25BA triagrt + 25BC triagdn + 25C4 triaglf + 25CA lozenge + 25CB circle + 25CF H18533 + 25D8 invbullet + 25D9 invcircle + 25E6 openbullet + 263A smileface + 263B invsmileface + 263C sun + 2640 female + 2642 male + 2660 spade + 2663 club + 2665 heart + 2666 diamond + 266A musicalnote + 266B musicalnotedbl + F6BE dotlessj + F6BF LL + F6C0 ll + F6C1 Scedilla + F6C2 scedilla + F6C3 commaaccent + F6C4 afii10063 + F6C5 afii10064 + F6C6 afii10192 + F6C7 afii10831 + F6C8 afii10832 + F6C9 Acute + F6CA Caron + F6CB Dieresis + F6CC DieresisAcute + F6CD DieresisGrave + F6CE Grave + F6CF Hungarumlaut + F6D0 Macron + F6D1 cyrBreve + F6D2 cyrFlex + F6D3 dblGrave + F6D4 cyrbreve + F6D5 cyrflex + F6D6 dblgrave + F6D7 dieresisacute + F6D8 dieresisgrave + F6D9 copyrightserif + F6DA registerserif + F6DB trademarkserif + F6DC onefitted + F6DD rupiah + F6DE threequartersemdash + F6DF centinferior + F6E0 centsuperior + F6E1 commainferior + F6E2 commasuperior + F6E3 dollarinferior + F6E4 dollarsuperior + F6E5 hypheninferior + F6E6 hyphensuperior + F6E7 periodinferior + F6E8 periodsuperior + F6E9 asuperior + F6EA bsuperior + F6EB dsuperior + F6EC esuperior + F6ED isuperior + F6EE lsuperior + F6EF msuperior + F6F0 osuperior + F6F1 rsuperior + F6F2 ssuperior + F6F3 tsuperior + F6F4 Brevesmall + F6F5 Caronsmall + F6F6 Circumflexsmall + F6F7 Dotaccentsmall + F6F8 Hungarumlautsmall + F6F9 Lslashsmall + F6FA OEsmall + F6FB Ogoneksmall + F6FC Ringsmall + F6FD Scaronsmall + F6FE Tildesmall + F6FF Zcaronsmall + F721 exclamsmall + F724 dollaroldstyle + F726 ampersandsmall + F730 zerooldstyle + F731 oneoldstyle + F732 twooldstyle + F733 threeoldstyle + F734 fouroldstyle + F735 fiveoldstyle + F736 sixoldstyle + F737 sevenoldstyle + F738 eightoldstyle + F739 nineoldstyle + F73F questionsmall + F760 Gravesmall + F761 Asmall + F762 Bsmall + F763 Csmall + F764 Dsmall + F765 Esmall + F766 Fsmall + F767 Gsmall + F768 Hsmall + F769 Ismall + F76A Jsmall + F76B Ksmall + F76C Lsmall + F76D Msmall + F76E Nsmall + F76F Osmall + F770 Psmall + F771 Qsmall + F772 Rsmall + F773 Ssmall + F774 Tsmall + F775 Usmall + F776 Vsmall + F777 Wsmall + F778 Xsmall + F779 Ysmall + F77A Zsmall + F7A1 exclamdownsmall + F7A2 centoldstyle + F7A8 Dieresissmall + F7AF Macronsmall + F7B4 Acutesmall + F7B8 Cedillasmall + F7BF questiondownsmall + F7E0 Agravesmall + F7E1 Aacutesmall + F7E2 Acircumflexsmall + F7E3 Atildesmall + F7E4 Adieresissmall + F7E5 Aringsmall + F7E6 AEsmall + F7E7 Ccedillasmall + F7E8 Egravesmall + F7E9 Eacutesmall + F7EA Ecircumflexsmall + F7EB Edieresissmall + F7EC Igravesmall + F7ED Iacutesmall + F7EE Icircumflexsmall + F7EF Idieresissmall + F7F0 Ethsmall + F7F1 Ntildesmall + F7F2 Ogravesmall + F7F3 Oacutesmall + F7F4 Ocircumflexsmall + F7F5 Otildesmall + F7F6 Odieresissmall + F7F8 Oslashsmall + F7F9 Ugravesmall + F7FA Uacutesmall + F7FB Ucircumflexsmall + F7FC Udieresissmall + F7FD Yacutesmall + F7FE Thornsmall + F7FF Ydieresissmall + F8E5 radicalex + F8E6 arrowvertex + F8E7 arrowhorizex + F8E8 registersans + F8E9 copyrightsans + F8EA trademarksans + F8EB parenlefttp + F8EC parenleftex + F8ED parenleftbt + F8EE bracketlefttp + F8EF bracketleftex + F8F0 bracketleftbt + F8F1 bracelefttp + F8F2 braceleftmid + F8F3 braceleftbt + F8F4 braceex + F8F5 integralex + F8F6 parenrighttp + F8F7 parenrightex + F8F8 parenrightbt + F8F9 bracketrighttp + F8FA bracketrightex + F8FB bracketrightbt + F8FC bracerighttp + F8FD bracerightmid + F8FE bracerightbt + FB00 ff + FB01 fi + FB02 fl + FB03 ffi + FB04 ffl + FB1F afii57705 + FB2A afii57694 + FB2B afii57695 + FB35 afii57723 + FB4B afii57700 +)}; + + +sub CreatePostscriptEncoding +{ + my ($encoding) = @_; + my $result = "/CurrentEncoding \[\n"; + for (my $i = 0; $i < 256; $i += 8) + { + for (my $j = 0; $j < 8; $j++) + { + my $ch; + Tk::catch { $ch = $encoding->decode(chr($i+$j),1) }; + if ($@) + { + $result .= '/space'; + } + else + { + my $hexcode = sprintf("%04X",ord($ch)); + $result .= '/'.((exists $Tk::psglyphs->{$hexcode}) ? $Tk::psglyphs->{$hexcode} : 'space'); + } + } + $result .= "\n"; + } + $result .= "\] def\n"; + return $result; +} + +# precalculate entire prolog when this file is loaded +# (to speed things up) +$Tk::ps_preamable = "%%BeginProlog\n". + CreatePostscriptEncoding(Tk::SystemEncoding()). <<'END'; +50 dict begin +% This is a standard prolog for Postscript generated by Tk's canvas +% widget. +% RCS: @(#) $Id: //depot/Tkutf8/Canvas/Canvas.pm#12 $ + +% The definitions below just define all of the variables used in +% any of the procedures here. This is needed for obscure reasons +% explained on p. 716 of the Postscript manual (Section H.2.7, +% "Initializing Variables," in the section on Encapsulated Postscript). + +/baseline 0 def +/stipimage 0 def +/height 0 def +/justify 0 def +/lineLength 0 def +/spacing 0 def +/stipple 0 def +/strings 0 def +/xoffset 0 def +/yoffset 0 def +/tmpstip null def + + +/cstringshow { + { + dup type /stringtype eq + { show } { glyphshow } + ifelse + } + forall +} bind def + + + +/cstringwidth { + 0 exch 0 exch + { + dup type /stringtype eq + { stringwidth } { + currentfont /Encoding get exch 1 exch put (\001) stringwidth + } + ifelse + exch 3 1 roll add 3 1 roll add exch + } + forall +} bind def + +% font ISOEncode font +% This procedure changes the encoding of a font from the default +% Postscript encoding to current system encoding. It's typically invoked just +% before invoking "setfont". The body of this procedure comes from +% Section 5.6.1 of the Postscript book. + +/ISOEncode { + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding CurrentEncoding def + currentdict + end + + % I'm not sure why it's necessary to use "definefont" on this new + % font, but it seems to be important; just use the name "Temporary" + % for the font. + + /Temporary exch definefont +} bind def + +% StrokeClip +% +% This procedure converts the current path into a clip area under +% the assumption of stroking. It's a bit tricky because some Postscript +% interpreters get errors during strokepath for dashed lines. If +% this happens then turn off dashes and try again. + +/StrokeClip { + {strokepath} stopped { + (This Postscript printer gets limitcheck overflows when) = + (stippling dashed lines; lines will be printed solid instead.) = + [] 0 setdash strokepath} if + clip +} bind def + +% desiredSize EvenPixels closestSize +% +% The procedure below is used for stippling. Given the optimal size +% of a dot in a stipple pattern in the current user coordinate system, +% compute the closest size that is an exact multiple of the device's +% pixel size. This allows stipple patterns to be displayed without +% aliasing effects. + +/EvenPixels { + % Compute exact number of device pixels per stipple dot. + dup 0 matrix currentmatrix dtransform + dup mul exch dup mul add sqrt + + % Round to an integer, make sure the number is at least 1, and compute + % user coord distance corresponding to this. + dup round dup 1 lt {pop 1} if + exch div mul +} bind def + +% width height string StippleFill -- +% +% Given a path already set up and a clipping region generated from +% it, this procedure will fill the clipping region with a stipple +% pattern. "String" contains a proper image description of the +% stipple pattern and "width" and "height" give its dimensions. Each +% stipple dot is assumed to be about one unit across in the current +% user coordinate system. This procedure trashes the graphics state. + +/StippleFill { + % The following code is needed to work around a NeWSprint bug. + + /tmpstip 1 index def + + % Change the scaling so that one user unit in user coordinates + % corresponds to the size of one stipple dot. + 1 EvenPixels dup scale + + % Compute the bounding box occupied by the path (which is now + % the clipping region), and round the lower coordinates down + % to the nearest starting point for the stipple pattern. Be + % careful about negative numbers, since the rounding works + % differently on them. + + pathbbox + 4 2 roll + 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll + 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll + + % Stack now: width height string y1 y2 x1 x2 + % Below is a doubly-nested for loop to iterate across this area + % in units of the stipple pattern size, going up columns then + % across rows, blasting out a stipple-pattern-sized rectangle at + % each position + + 6 index exch { + 2 index 5 index 3 index { + % Stack now: width height string y1 y2 x y + + gsave + 1 index exch translate + 5 index 5 index true matrix tmpstip imagemask + grestore + } for + pop + } for + pop pop pop pop pop +} bind def + +% -- AdjustColor -- +% Given a color value already set for output by the caller, adjusts +% that value to a grayscale or mono value if requested by the CL +% variable. + +/AdjustColor { + CL 2 lt { + currentgray + CL 0 eq { + .5 lt {0} {1} ifelse + } if + setgray + } if +} bind def + +% x y strings spacing xoffset yoffset justify stipple DrawText -- +% This procedure does all of the real work of drawing text. The +% color and font must already have been set by the caller, and the +% following arguments must be on the stack: +% +% x, y - Coordinates at which to draw text. +% strings - An array of strings, one for each line of the text item, +% in order from top to bottom. +% spacing - Spacing between lines. +% xoffset - Horizontal offset for text bbox relative to x and y: 0 for +% nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. +% yoffset - Vertical offset for text bbox relative to x and y: 0 for +% nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. +% justify - 0 for left justification, 0.5 for center, 1 for right justify. +% stipple - Boolean value indicating whether or not text is to be +% drawn in stippled fashion. If text is stippled, +% procedure StippleText must have been defined to call +% StippleFill in the right way. +% +% Also, when this procedure is invoked, the color and font must already +% have been set for the text. + +/DrawText { + /stipple exch def + /justify exch def + /yoffset exch def + /xoffset exch def + /spacing exch def + /strings exch def + + % First scan through all of the text to find the widest line. + + /lineLength 0 def + strings { + cstringwidth pop + dup lineLength gt {/lineLength exch def} {pop} ifelse + newpath + } forall + + % Compute the baseline offset and the actual font height. + + 0 0 moveto (TXygqPZ) false charpath + pathbbox dup /baseline exch def + exch pop exch sub /height exch def pop + newpath + + % Translate coordinates first so that the origin is at the upper-left + % corner of the text's bounding box. Remember that x and y for + % positioning are still on the stack. + + translate + lineLength xoffset mul + strings length 1 sub spacing mul height add yoffset mul translate + + % Now use the baseline and justification information to translate so + % that the origin is at the baseline and positioning point for the + % first line of text. + + justify lineLength mul baseline neg translate + + % Iterate over each of the lines to output it. For each line, + % compute its width again so it can be properly justified, then + % display it. + + strings { + dup cstringwidth pop + justify neg mul 0 moveto + stipple { + + + % The text is stippled, so turn it into a path and print + % by calling StippledText, which in turn calls StippleFill. + % Unfortunately, many Postscript interpreters will get + % overflow errors if we try to do the whole string at + % once, so do it a character at a time. + + gsave + /char (X) def + { + dup type /stringtype eq { + % This segment is a string. + { + char 0 3 -1 roll put + currentpoint + gsave + char true charpath clip StippleText + grestore + char stringwidth translate + moveto + } forall + } { + % This segment is glyph name + % Temporary override + currentfont /Encoding get exch 1 exch put + currentpoint + gsave (\001) true charpath clip StippleText + grestore + (\001) stringwidth translate + moveto + } ifelse + } forall + grestore + } {cstringshow} ifelse + 0 spacing neg translate + } forall +} bind def + +%%EndProlog +END + +1; +__END__ + diff --git a/Master/tlpkg/installer/perllib/Tk/Menu.pm b/Master/tlpkg/installer/perllib/Tk/Menu.pm new file mode 100644 index 00000000000..91e9aceed61 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Menu.pm @@ -0,0 +1,1145 @@ +# Converted from menu.tcl -- +# +# This file defines the default bindings for Tk menus and menubuttons. +# It also implements keyboard traversal of menus and implements a few +# other utility procedures related to menus. +# +# @(#) menu.tcl 1.34 94/12/19 17:09:09 +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +package Tk::Menu; +require Tk; +require Tk::Widget; +require Tk::Wm; +require Tk::Derived; +require Tk::Menu::Item; + + +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #21 $ =~ /\D(\d+)\s*$/; + +use strict; + +use base qw(Tk::Wm Tk::Derived Tk::Widget); + +Construct Tk::Widget 'Menu'; + +sub Tk_cmd { \&Tk::_menu } + +Tk::Methods('activate','add','clone','delete','entrycget','entryconfigure', + 'index','insert','invoke','post','postcascade','type', + 'unpost','yposition'); + +import Tk qw(Ev); + +sub CreateArgs +{ + my ($package,$parent,$args) = @_; + # Remove from hash %$args any configure-like + # options which only apply at create time (e.g. -class for Frame) + # return these as a list of -key => value pairs + my @result = (); + my $opt; + foreach $opt (qw(-type -screen -visual -colormap)) + { + my $val = delete $args->{$opt}; + push(@result, $opt => $val) if (defined $val); + } + return @result; +} + +sub InitObject +{ + my ($menu,$args) = @_; + my $menuitems = delete $args->{-menuitems}; + $menu->SUPER::InitObject($args); + $menu->ConfigSpecs(-foreground => ['SELF']); + if (defined $menuitems) + { + # If any other args do configure now + if (%$args) + { + $menu->configure(%$args); + %$args = (); + } + $menu->AddItems(@$menuitems) + } +} + +sub AddItems +{ + my $menu = shift; + ITEM: + while (@_) + { + my $item = shift; + if (!ref($item)) + { + $menu->separator; # A separator + } + else + { + my ($kind,$name,%minfo) = ( @$item ); + my $invoke = delete $minfo{'-invoke'}; + if (defined $name) + { + $minfo{-label} = $name unless defined($minfo{-label}); + $menu->$kind(%minfo); + } + else + { + $menu->BackTrace("Don't recognize " . join(' ',@$item)); + } + } # A non-separator + } +} + +# +#------------------------------------------------------------------------- +# Elements of tkPriv that are used in this file: +# +# cursor - Saves the -cursor option for the posted menubutton. +# focus - Saves the focus during a menu selection operation. +# Focus gets restored here when the menu is unposted. +# inMenubutton - The name of the menubutton widget containing +# the mouse, or an empty string if the mouse is +# not over any menubutton. +# popup - If a menu has been popped up via tk_popup, this +# gives the name of the menu. Otherwise this +# value is empty. +# postedMb - Name of the menubutton whose menu is currently +# posted, or an empty string if nothing is posted +# A grab is set on this widget. +# relief - Used to save the original relief of the current +# menubutton. +# window - When the mouse is over a menu, this holds the +# name of the menu; it's cleared when the mouse +# leaves the menu. +#------------------------------------------------------------------------- +#------------------------------------------------------------------------- +# Overall note: +# This file is tricky because there are four different ways that menus +# can be used: +# +# 1. As a pulldown from a menubutton. This is the most common usage. +# In this style, the variable tkPriv(postedMb) identifies the posted +# menubutton. +# 2. As a torn-off menu copied from some other menu. In this style +# tkPriv(postedMb) is empty, and the top-level menu is no +# override-redirect. +# 3. As an option menu, triggered from an option menubutton. In thi +# style tkPriv(postedMb) identifies the posted menubutton. +# 4. As a popup menu. In this style tkPriv(postedMb) is empty and +# the top-level menu is override-redirect. +# +# The various binding procedures use the state described above to +# distinguish the various cases and take different actions in each +# case. +#------------------------------------------------------------------------- +# Bind -- +# This procedure is invoked the first time the mouse enters a menubutton +# widget or a menubutton widget receives the input focus. It creates +# all of the class bindings for both menubuttons and menus. +# +# Arguments: +# w - The widget that was just entered or just received +# the input focus. +# event - Indicates which event caused the procedure to be invoked +# (Enter or FocusIn). It is used so that we can carry out +# the functions of that event in addition to setting up +# bindings. +sub ClassInit +{ + my ($class,$mw) = @_; + # Must set focus when mouse enters a menu, in order to allow + # mixed-mode processing using both the mouse and the keyboard. + $mw->bind($class,'<FocusIn>', 'NoOp'); + $mw->bind($class,'<Enter>', 'Enter'); + $mw->bind($class,'<Leave>', ['Leave',Ev('X'),Ev('Y'),Ev('s')]); + $mw->bind($class,'<Motion>', ['Motion',Ev('x'),Ev('y'),Ev('s')]); + $mw->bind($class,'<ButtonPress>','ButtonDown'); + $mw->bind($class,'<ButtonRelease>',['Invoke',1]); + $mw->bind($class,'<space>',['Invoke',0]); + $mw->bind($class,'<Return>',['Invoke',0]); + $mw->bind($class,'<Escape>','Escape'); + $mw->bind($class,'<Left>','LeftArrow'); + $mw->bind($class,'<Right>','RightArrow'); + $mw->bind($class,'<Up>','UpArrow'); + $mw->bind($class,'<Down>','DownArrow'); + $mw->bind($class,'<KeyPress>', ['TraverseWithinMenu',Ev('K')]); + $mw->bind($class,'<Alt-KeyPress>', ['TraverseWithinMenu',Ev('K')]); + return $class; +} + +sub UpArrow +{ + my $menu = shift; + if ($menu->cget('-type') eq 'menubar') + { + $menu->NextMenu('left'); + } + else + { + $menu->NextEntry(-1); + } +} + +sub DownArrow +{ + my $menu = shift; + if ($menu->cget('-type') eq 'menubar') + { + $menu->NextMenu('right'); + } + else + { + $menu->NextEntry(1); + } +} + +sub LeftArrow +{ + my $menu = shift; + if ($menu->cget('-type') eq 'menubar') + { + $menu->NextEntry(-1); + } + else + { + $menu->NextMenu('left'); + } +} + +sub RightArrow +{ + my $menu = shift; + if ($menu->cget('-type') eq 'menubar') + { + $menu->NextEntry(1); + } + else + { + $menu->NextMenu('right'); + } +} + + + +# Unpost -- +# This procedure unposts a given menu, plus all of its ancestors up +# to (and including) a menubutton, if any. It also restores various +# values to what they were before the menu was posted, and releases +# a grab if there's a menubutton involved. Special notes: +# 1. It's important to unpost all menus before releasing the grab, so +# that any Enter-Leave events (e.g. from menu back to main +# application) have mode NotifyGrab. +# 2. Be sure to enclose various groups of commands in "catch" so that +# the procedure will complete even if the menubutton or the menu +# or the grab window has been deleted. +# +# Arguments: +# menu - Name of a menu to unpost. Ignored if there +# is a posted menubutton. +sub Unpost +{ + my $menu = shift; + my $mb = $Tk::postedMb; + + # Restore focus right away (otherwise X will take focus away when + # the menu is unmapped and under some window managers (e.g. olvwm) + # we'll lose the focus completely). + + eval {local $SIG{__DIE__}; $Tk::focus->focus() } if (defined $Tk::focus); + undef $Tk::focus; + + # Unpost menu(s) and restore some stuff that's dependent on + # what was posted. + eval {local $SIG{__DIE__}; + if (defined $mb) + { + $menu = $mb->cget('-menu'); + $menu->unpost(); + $Tk::postedMb = undef; + $mb->configure('-cursor',$Tk::cursor); + $mb->configure('-relief',$Tk::relief) + } + elsif (defined $Tk::popup) + { + $Tk::popup->unpost(); + my $grab = $Tk::popup->grabCurrent; + $grab->grabRelease if (defined $grab); + + undef $Tk::popup; + } + elsif (defined $menu && ref $menu && + $menu->cget('-type') ne 'menubar' && + $menu->cget('-type') ne 'tearoff' + ) + { + # We're in a cascaded sub-menu from a torn-off menu or popup. + # Unpost all the menus up to the toplevel one (but not + # including the top-level torn-off one) and deactivate the + # top-level torn off menu if there is one. + while (1) + { + my $parent = $menu->parent; + last if (!$parent->IsMenu || !$parent->ismapped); + $parent->postcascade('none'); + $parent->GenerateMenuSelect; + $parent->activate('none'); + my $type = $parent->cget('-type'); + last if ($type eq 'menubar' || $type eq 'tearoff'); + $menu = $parent + } + $menu->unpost() if ($menu->cget('-type') ne 'menubar'); + } + }; + warn "$@" if ($@); + if ($Tk::tearoff || $Tk::menubar) + { + # Release grab, if any. + if (defined $menu && ref $menu) + { + my $grab = $menu->grabCurrent; + $grab->grabRelease if (defined $grab); + } + RestoreOldGrab(); + if ($Tk::menubar) + { + $Tk::menubar->configure(-cursor => $Tk::cursor); + undef $Tk::menubar; + } + if ($Tk::platform ne 'unix') + { + undef $Tk::tearoff; + } + } +} + +sub RestoreOldGrab +{ + if (defined $Tk::oldGrab) + { + eval + { + local $SIG{__DIE__}; + if ($Tk::grabStatus eq 'global') + { + $Tk::oldGrab->grabGlobal; + } + else + { + $Tk::oldGrab->grab; + } + }; + undef $Tk::oldGrab; + } +} + +sub typeIS +{my $w = shift; + my $type = $w->type(shift); + return defined $type && $type eq shift; +} + +# Motion -- +# This procedure is called to handle mouse motion events for menus. +# It does two things. First, it resets the active element in the +# menu, if the mouse is over the menu. Second, if a mouse button +# is down, it posts and unposts cascade entries to match the mouse +# position. +# +# Arguments: +# menu - The menu window. +# y - The y position of the mouse. +# state - Modifier state (tells whether buttons are down). +sub Motion +{ + my $menu = shift; + my $x = shift; + my $y = shift; + my $state = shift; + my $t = $menu->cget('-type'); + + if ($menu->IS($Tk::window)) + { + if ($menu->cget('-type') eq 'menubar') + { +# if (defined($Tk::focus) && $Tk::focus != $menu) + { + $menu->activate("\@$x,$y"); + $menu->GenerateMenuSelect; + } + } + else + { + $menu->activate("\@$x,$y"); + $menu->GenerateMenuSelect; + } + } + if (($state & 0x1f00) != 0) + { + $menu->postcascade('active') + } +} +# ButtonDown -- +# Handles button presses in menus. There are a couple of tricky things +# here: +# 1. Change the posted cascade entry (if any) to match the mouse position. +# 2. If there is a posted menubutton, must grab to the menubutton so +# that it can track mouse motions over other menubuttons and change +# the posted menu. +# 3. If there's no posted menubutton (e.g. because we're a torn-off menu +# or one of its descendants) must grab to the top-level menu so that +# we can track mouse motions across the entire menu hierarchy. + +# +# Arguments: +# menu - The menu window. +sub ButtonDown +{ + my $menu = shift; + $menu->postcascade('active'); + if (defined $Tk::postedMb) + { + $Tk::postedMb->grabGlobal + } + else + { + while ($menu->cget('-type') eq 'normal' + && $menu->parent->IsMenu + && $menu->parent->ismapped + ) + { + $menu = $menu->parent; + } + + if (!defined $Tk::menuBar) + { + $Tk::menuBar = $menu; + $Tk::cursor = $menu->cget('-cursor'); + $menu->configure(-cursor => 'arrow'); + } + + # Don't update grab information if the grab window isn't changing. + # Otherwise, we'll get an error when we unpost the menus and + # restore the grab, since the old grab window will not be viewable + # anymore. + + $menu->SaveGrabInfo unless ($menu->IS($menu->grabCurrent)); + + # Must re-grab even if the grab window hasn't changed, in order + # to release the implicit grab from the button press. + + $menu->grabGlobal if ($Tk::platform eq 'unix'); + } +} + +sub Enter +{ + my $w = shift; + my $ev = $w->XEvent; + $Tk::window = $w; + if ($w->cget('-type') eq 'tearoff') + { + if ($ev->m ne 'NotifyUngrab') + { + $w->SetFocus if ($Tk::platform eq 'unix'); + } + } + $w->Motion($ev->x, $ev->y, $ev->s); +} + +# Leave -- +# This procedure is invoked to handle Leave events for a menu. It +# deactivates everything unless the active element is a cascade element +# and the mouse is now over the submenu. +# +# Arguments: +# menu - The menu window. +# rootx, rooty - Root coordinates of mouse. +# state - Modifier state. +sub Leave +{ + my $menu = shift; + my $rootx = shift; + my $rooty = shift; + my $state = shift; + undef $Tk::window; + return if ($menu->index('active') eq 'none'); + if ($menu->typeIS('active','cascade')) + { + my $c = $menu->Containing($rootx,$rooty); + return if (defined $c && $menu->entrycget('active','-menu')->IS($c)); + } + $menu->activate('none'); + $menu->GenerateMenuSelect; +} + +# Invoke -- +# This procedure is invoked when button 1 is released over a menu. +# It invokes the appropriate menu action and unposts the menu if +# it came from a menubutton. +# +# Arguments: +# w - Name of the menu widget. +sub Invoke +{ + my $w = shift; + my $release = shift; + + if ($release && !defined($Tk::window)) + { + # Mouse was pressed over a menu without a menu button, then + # dragged off the menu (possibly with a cascade posted) and + # released. Unpost everything and quit. + + $w->postcascade('none'); + $w->activate('none'); + $w->eventGenerate('<<MenuSelect>>'); + $w->Unpost; + return; + } + + my $type = $w->type('active'); + if ($w->typeIS('active','cascade')) + { + $w->postcascade('active'); + my $menu = $w->entrycget('active','-menu'); + $menu->FirstEntry() if (defined $menu); + } + elsif ($w->typeIS('active','tearoff')) + { + $w->Unpost(); + $w->tearOffMenu(); + } + elsif ($w->typeIS('active','menubar')) + { + $w->postcascade('none'); + $w->activate('none'); + $w->eventGenerate('<<MenuSelect>>'); + $w->Unpost; + } + else + { + $w->Unpost(); + $w->invoke('active') + } +} +# Escape -- +# This procedure is invoked for the Cancel (or Escape) key. It unposts +# the given menu and, if it is the top-level menu for a menu button, +# unposts the menu button as well. +# +# Arguments: +# menu - Name of the menu window. +sub Escape +{ + my $menu = shift; + my $parent = $menu->parent; + if (!$parent->IsMenu) + { + $menu->Unpost() + } + elsif ($parent->cget('-type') eq 'menubar') + { + $menu->Unpost; + RestoreOldGrab(); + } + else + { + $menu->NextMenu(-1) + } +} +# LeftRight -- +# This procedure is invoked to handle "left" and "right" traversal +# motions in menus. It traverses to the next menu in a menu bar, +# or into or out of a cascaded menu. +# +# Arguments: +# menu - The menu that received the keyboard +# event. +# direction - Direction in which to move: "left" or "right" +sub NextMenu +{ + my $menu = shift; + my $direction = shift; + # First handle traversals into and out of cascaded menus. + my $count; + if ($direction eq 'right') + { + $count = 1; + if ($menu->typeIS('active','cascade')) + { + $menu->postcascade('active'); + my $m2 = $menu->entrycget('active','-menu'); + $m2->FirstEntry if (defined $m2); + return; + } + else + { + my $parent = $menu->parent; + while ($parent->PathName ne '.') + { + if ($parent->IsMenu && $parent->cget('-type') eq 'menubar') + { + $parent->SetFocus; + $parent->NextEntry(1); + return; + } + $parent = $parent->parent; + } + } + } + else + { + $count = -1; + my $m2 = $menu->parent; + if ($m2->IsMenu) + { + if ($m2->cget('-type') ne 'menubar') + { + $menu->activate('none'); + $menu->GenerateMenuSelect; + $m2->SetFocus; + # This code unposts any posted submenu in the parent. + my $tmp = $m2->index('active'); + $m2->activate('none'); + $m2->activate($tmp); + return; + } + } + } + # Can't traverse into or out of a cascaded menu. Go to the next + # or previous menubutton, if that makes sense. + + my $m2 = $menu->parent; + if ($m2->IsMenu) + { + if ($m2->cget('-type') eq 'menubar') + { + $m2->SetFocus; + $m2->NextEntry(-1); + return; + } + } + + my $w = $Tk::postedMb; + return unless defined $w; + my @buttons = $w->parent->children; + my $length = @buttons; + my $i = Tk::lsearch(\@buttons,$w)+$count; + my $mb; + while (1) + { + while ($i < 0) + { + $i += $length + } + while ($i >= $length) + { + $i += -$length + } + $mb = $buttons[$i]; + last if ($mb->IsMenubutton && $mb->cget('-state') ne 'disabled' + && defined($mb->cget('-menu')) + && $mb->cget('-menu')->index('last') ne 'none' + ); + return if ($mb == $w); + $i += $count + } + $mb->PostFirst(); +} +# NextEntry -- +# Activate the next higher or lower entry in the posted menu, +# wrapping around at the ends. Disabled entries are skipped. +# +# Arguments: +# menu - Menu window that received the keystroke. +# count - 1 means go to the next lower entry, +# -1 means go to the next higher entry. +sub NextEntry +{ + my $menu = shift; + my $count = shift; + if ($menu->index('last') eq 'none') + { + return; + } + my $length = $menu->index('last')+1; + my $quitAfter = $length; + my $active = $menu->index('active'); + my $i = ($active eq 'none') ? 0 : $active+$count; + while (1) + { + return if ($quitAfter <= 0); + while ($i < 0) + { + $i += $length + } + while ($i >= $length) + { + $i += -$length + } + my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') }; + last if (defined($state) && $state ne 'disabled'); + return if ($i == $active); + $i += $count; + $quitAfter -= 1; + } + $menu->activate($i); + $menu->GenerateMenuSelect; + if ($menu->cget('-type') eq 'menubar' && $menu->type($i) eq 'cascade') + { + my $cascade = $menu->entrycget($i, '-menu'); + $menu->postcascade($i); + $cascade->FirstEntry if (defined $cascade); + } +} + + +# tkTraverseWithinMenu +# This procedure implements keyboard traversal within a menu. It +# searches for an entry in the menu that has "char" underlined. If +# such an entry is found, it is invoked and the menu is unposted. +# +# Arguments: +# w - The name of the menu widget. +# char - The character to look for; case is +# ignored. If the string is empty then +# nothing happens. +sub TraverseWithinMenu +{ + my $w = shift; + my $char = shift; + return unless (defined $char); + $char = "\L$char"; + my $last = $w->index('last'); + return if ($last eq 'none'); + for (my $i = 0;$i <= $last;$i += 1) + { + my $label = eval {local $SIG{__DIE__}; $w->entrycget($i,'-label') }; + next unless defined($label); + my $ul = $w->entrycget($i,'-underline'); + if (defined $ul && $ul >= 0) + { + $label = substr("\L$label",$ul,1); + if (defined($label) && $label eq $char) + { + if ($w->type($i) eq 'cascade') + { + $w->postcascade($i); + $w->activate($i); + my $m2 = $w->entrycget($i,'-menu'); + $m2->FirstEntry if (defined $m2); + } + else + { + $w->Unpost(); + $w->invoke($i); + } + return; + } + } + } +} + +sub FindMenu +{ + my ($menu,$char) = @_; + if ($menu->cget('-type') eq 'menubar') + { + if (!defined($char) || $char eq '') + { + $menu->FirstEntry; + } + else + { + $menu->TraverseWithinMenu($char); + } + return $menu; + } + return undef; +} + + +# FirstEntry -- +# Given a menu, this procedure finds the first entry that isn't +# disabled or a tear-off or separator, and activates that entry. +# However, if there is already an active entry in the menu (e.g., +# because of a previous call to tkPostOverPoint) then the active +# entry isn't changed. This procedure also sets the input focus +# to the menu. +# +# Arguments: +# menu - Name of the menu window (possibly empty). +sub FirstEntry +{ + my $menu = shift; + return if (!defined($menu) || $menu eq '' || !ref($menu)); + $menu->SetFocus; + return if ($menu->index('active') ne 'none'); + my $last = $menu->index('last'); + return if ($last eq 'none'); + for (my $i = 0;$i <= $last;$i += 1) + { + my $state = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-state') }; + if (defined $state && $state ne 'disabled' && !$menu->typeIS($i,'tearoff')) + { + $menu->activate($i); + $menu->GenerateMenuSelect; + if ($menu->type($i) eq 'cascade') + { + my $cascade = $menu->entrycget($i,'-menu'); + if (defined $cascade) + { + $menu->postcascade($i); + $cascade->FirstEntry; + } + } + return; + } + } +} + +# FindName -- +# Given a menu and a text string, return the index of the menu entry +# that displays the string as its label. If there is no such entry, +# return an empty string. This procedure is tricky because some names +# like "active" have a special meaning in menu commands, so we can't +# always use the "index" widget command. +# +# Arguments: +# menu - Name of the menu widget. +# s - String to look for. +sub FindName +{ + my $menu = shift; + my $s = shift; + my $i = undef; + if ($s !~ /^active$|^last$|^none$|^[0-9]|^@/) + { + $i = eval {local $SIG{__DIE__}; $menu->index($s) }; + return $i; + } + my $last = $menu->index('last'); + return if ($last eq 'none'); + for ($i = 0;$i <= $last;$i += 1) + { + my $label = eval {local $SIG{__DIE__}; $menu->entrycget($i,'-label') }; + return $i if (defined $label && $label eq $s); + } + return undef; +} +# PostOverPoint -- +# This procedure posts a given menu such that a given entry in the +# menu is centered over a given point in the root window. It also +# activates the given entry. +# +# Arguments: +# menu - Menu to post. +# x, y - Root coordinates of point. +# entry - Index of entry within menu to center over (x,y). +# If omitted or specified as {}, then the menu's +# upper-left corner goes at (x,y). +sub PostOverPoint +{ + my $menu = shift; + my $x = shift; + my $y = shift; + my $entry = shift; + if (defined $entry) + { + if ($entry == $menu->index('last')) + { + $y -= ($menu->yposition($entry)+$menu->height)/2; + } + else + { + $y -= ($menu->yposition($entry)+$menu->yposition($entry+1))/2; + } + $x -= $menu->reqwidth/2; + } + $menu->post($x,$y); + if (defined($entry) && $menu->entrycget($entry,'-state') ne 'disabled') + { + $menu->activate($entry); + $menu->GenerateMenuSelect; + } +} +# tk_popup -- +# This procedure pops up a menu and sets things up for traversing +# the menu and its submenus. +# +# Arguments: +# menu - Name of the menu to be popped up. +# x, y - Root coordinates at which to pop up the +# menu. +# entry - Index of a menu entry to center over (x,y). +# If omitted or specified as {}, then menu's +# upper-left corner goes at (x,y). +sub Post +{ + my $menu = shift; + return unless (defined $menu); + my $x = shift; + my $y = shift; + my $entry = shift; + Unpost(undef) if (defined($Tk::popup) || defined($Tk::postedMb)); + $menu->PostOverPoint($x,$y,$entry); + $menu->grabGlobal; + $Tk::popup = $menu; + $Tk::focus = $menu->focusCurrent; + $menu->focus(); +} + +sub SetFocus +{ + my $menu = shift; + $Tk::focus = $menu->focusCurrent if (!defined($Tk::focus)); + $menu->focus; +} + +sub GenerateMenuSelect +{ + my $menu = shift; + $Tk::activeMenu = $menu; + $Tk::activeItem = $menu->index('active'); + $menu->eventGenerate('<<MenuSelect>>'); # FIXME +} + +# Converted from tearoff.tcl -- +# +# This file contains procedures that implement tear-off menus. +# +# @(#) tearoff.tcl 1.3 94/12/17 16:05:25 +# +# Copyright (c) 1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# tkTearoffMenu -- +# Given the name of a menu, this procedure creates a torn-off menu +# that is identical to the given menu (including nested submenus). +# The new torn-off menu exists as a toplevel window managed by the +# window manager. The return value is the name of the new menu. +# +# Arguments: +# w - The menu to be torn-off (duplicated). +sub tearOffMenu +{ + my $w = shift; + my $x = (@_) ? shift : 0; + my $y = (@_) ? shift : 0; + + $x = $w->rootx if $x == 0; + $y = $w->rooty if $y == 0; + + # Find a unique name to use for the torn-off menu. Find the first + # ancestor of w that is a toplevel but not a menu, and use this as + # the parent of the new menu. This guarantees that the torn off + # menu will be on the same screen as the original menu. By making + # it a child of the ancestor, rather than a child of the menu, it + # can continue to live even if the menu is deleted; it will go + # away when the toplevel goes away. + + my $parent = $w->parent; + while ($parent->toplevel != $parent || $parent->IsMenu) + { + $parent = $parent->parent; + } + my $menu = $w->clone($parent->PathName,'tearoff'); + + # Pick a title for the new menu by looking at the parent of the + # original: if the parent is a menu, then use the text of the active + # entry. If it's a menubutton then use its text. + my $title = $w->cget('-title'); + # print ref($w),' ',$w->PathName," $w\n"; + unless (defined $title && length($title)) + { + $parent = $w->parent; + if ($parent) + { + if ($parent->IsMenubutton) + { + $title = $parent->cget('-text'); + } + elsif ($parent->IsMenu) + { + $title = $parent->entrycget('active','-label'); + } + } + } + $menu->title($title) if (defined $title && length($title)); + $menu->post($x,$y); + # Set tkPriv(focus) on entry: otherwise the focus will get lost + # after keyboard invocation of a sub-menu (it will stay on the + # submenu). + + + # This seems to conflict with <Enter> class binding above + # if this fires before the class binding the wrong thing + # will get saved in $Tk::focus + # $menu->bind('<Enter>','EnterFocus'); + $menu->Callback('-tearoffcommand'); + return $menu; +} + +# tkMenuDup -- +# Given a menu (hierarchy), create a duplicate menu (hierarchy) +# in a given window. +# +# Arguments: +# src - Source window. Must be a menu. It and its +# menu descendants will be duplicated at path. +# path - Name to use for topmost menu in duplicate +# hierarchy. + +sub tkMenuDup +{ + my ($src,$path,$type) = @_; + my ($pname,$name) = $path =~ /^(.*)\.([^\.]*)$/; + ($name) = $src->PathName =~ /^.*\.([^\.]*)$/ unless $name; + my $parent = ($pname) ? $src->Widget($pname) : $src->MainWindow; + my %args = (Name => $name, -type => $type); + foreach my $option ($src->configure()) + { + next if (@$option == 2); + $args{$$option[0]} = $$option[4] unless exists $args{$$option[0]}; + } + my $dst = ref($src)->new($parent,%args); + # print "MenuDup $src $path $name $type ->",$dst->PathName,"\n"; + $_[1] = $dst; + if ($type eq 'tearoff') + { + $dst->transient($parent->toplevel); + } + my $last = $src->index('last'); + if ($last ne 'none') + { + for (my $i = $src->cget('-tearoff'); $i <= $last; $i++) + { + my $type = $src->type($i); + if (defined $type) + { + my @args = (); + foreach my $option ($src->entryconfigure($i)) + { + next if (@$option == 2); + push(@args,$$option[0],$$option[4]) if (defined $$option[4]); + } + $dst->add($type,@args); + } + } + } + # Duplicate the binding tags and bindings from the source menu. + my @bindtags = $src->bindtags; + $path = $src->PathName; + foreach (@bindtags) + { + $_ = $dst if ($_ eq $path); + } + $dst->bindtags([@bindtags]); + foreach my $event ($src->bind) + { + my $cb = $src->bind($event); +# print "$event => $cb\n"; + $dst->bind($event,$cb->Substitute($src,$dst)); + } + return $dst; +} + + + +# Some convenience methods + +sub separator { require Tk::Menu::Item; shift->Separator(@_); } +sub cascade { require Tk::Menu::Item; shift->Cascade(@_); } +sub checkbutton { require Tk::Menu::Item; shift->Checkbutton(@_); } +sub radiobutton { require Tk::Menu::Item; shift->Radiobutton(@_); } + +sub command +{ + my ($menu,%args) = @_; + require Tk::Menu::Item; + if (exists $args{-button}) + { + # Backward compatible stuff from 'Menubar' + my $button = delete $args{-button}; + $button = ['Misc', -underline => 0 ] unless (defined $button); + my @bargs = (); + ($button,@bargs) = @$button if (ref($button) && ref $button eq 'ARRAY'); + $menu = $menu->Menubutton(-label => $button, @bargs); + } + $menu->Command(%args); +} + +sub Menubutton +{ + my ($menu,%args) = @_; + my $name = delete($args{'-text'}) || $args{'-label'};; + $args{'-label'} = $name if (defined $name); + my $items = delete $args{'-menuitems'}; + foreach my $opt (qw(-pack -after -before -side -padx -ipadx -pady -ipady -fill)) + { + delete $args{$opt}; + } + if (defined($name) && !defined($args{-underline})) + { + my $underline = ($name =~ s/^(.*)~/$1/) ? length($1): undef; + if (defined($underline) && ($underline >= 0)) + { + $args{-underline} = $underline; + $args{-label} = $name; + } + } + my $hash = $menu->TkHash('MenuButtons'); + my $mb = $hash->{$name}; + if (defined $mb) + { + delete $args{'-tearoff'}; # too late! + $mb->configure(%args) if %args; + } + else + { + $mb = $menu->cascade(%args); + $hash->{$name} = $mb; + } + $mb->menu->AddItems(@$items) if defined($items) && @$items; + return $mb; +} + +sub BalloonInfo +{ + my ($menu,$balloon,$X,$Y,@opt) = @_; + my $i = $menu->index('active'); + if ($i eq 'none') + { + my $y = $Y - $menu->rooty; + $i = $menu->index("\@$y"); + } + foreach my $opt (@opt) + { + my $info = $balloon->GetOption($opt,$menu); + if ($opt =~ /^-(statusmsg|balloonmsg)$/ && UNIVERSAL::isa($info,'ARRAY')) + { + $balloon->Subclient($i); + return '' if $i eq 'none'; + return ${$info}[$i] || ''; + } + return $info; + } +} + +1; + +__END__ + + diff --git a/Master/tlpkg/installer/perllib/Tk/Menu/Item.pm b/Master/tlpkg/installer/perllib/Tk/Menu/Item.pm new file mode 100644 index 00000000000..403052ef5bd --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Menu/Item.pm @@ -0,0 +1,180 @@ +package Tk::Menu::Item; + +require Tk::Menu; + +use Carp; +use strict; + +use vars qw($VERSION); +$VERSION = '4.004'; # $Id: //depot/Tkutf8/Tk/Menu/Item.pm#4 $ + +sub PreInit +{ + # Dummy (virtual) method + my ($class,$menu,$minfo) = @_; +} + +sub new +{ + my ($class,$menu,%minfo) = @_; + my $kind = $class->kind; + my $name = $minfo{'-label'}; + if (defined $kind) + { + my $invoke = delete $minfo{'-invoke'}; + if (defined $name) + { + # Use ~ in name/label to set -underline + if (defined($minfo{-label}) && !defined($minfo{-underline})) + { + my $cleanlabel = $minfo{-label}; + my $underline = ($cleanlabel =~ s/^(.*)~/$1/) ? length($1): undef; + if (defined($underline) && ($underline >= 0)) + { + $minfo{-underline} = $underline; + $name = $cleanlabel if ($minfo{-label} eq $name); + $minfo{-label} = $cleanlabel; + } + } + } + else + { + $name = $minfo{'-bitmap'} || $minfo{'-image'}; + croak('No -label') unless defined($name); + $minfo{'-label'} = $name; + } + $class->PreInit($menu,\%minfo); + $menu->add($kind,%minfo); + $menu->invoke('last') if ($invoke); + } + else + { + $menu->add('separator'); + } + return bless [$menu,$name],$class; +} + +sub configure +{ + my $obj = shift; + my ($menu,$name) = @$obj; + my %args = @_; + $obj->[1] = $args{'-label'} if exists $args{'-label'}; + $menu->entryconfigure($name,@_); +} + +sub cget +{ + my $obj = shift; + my ($menu,$name) = @$obj; + $menu->entrycget($name,@_); +} + +sub parentMenu +{ + my $obj = shift; + return $obj->[0]; +} + +# Default "kind" is a command +sub kind { return 'command' } + +# Now the derived packages + +package Tk::Menu::Separator; +use base qw(Tk::Menu::Item); +Construct Tk::Menu 'Separator'; +sub kind { return undef } + +package Tk::Menu::Button; +use base qw(Tk::Menu::Item); +Construct Tk::Menu 'Button'; +Construct Tk::Menu 'Command'; + +#package Tk::Menu::Command; +#use base qw(Tk::Menu::Button); +#Construct Tk::Menu 'Command'; + +package Tk::Menu::Cascade; +use base qw(Tk::Menu::Item); +Construct Tk::Menu 'Cascade'; +sub kind { return 'cascade' } +use Carp; + +sub PreInit +{ + my ($class,$menu,$minfo) = @_; + my $tearoff = delete $minfo->{-tearoff}; + my $items = delete $minfo->{-menuitems}; + my $widgetvar = delete $minfo->{-menuvar}; + my $command = delete $minfo->{-postcommand}; + my $name = delete $minfo->{'Name'}; + $name = $minfo->{'-label'} unless defined $name; + my @args = (); + push(@args, '-tearoff' => $tearoff) if (defined $tearoff); + push(@args, '-menuitems' => $items) if (defined $items); + push(@args, '-postcommand' => $command) if (defined $command); + my $submenu = $minfo->{'-menu'}; + unless (defined $submenu) + { + $minfo->{'-menu'} = $submenu = $menu->Menu(Name => $name, @args); + } + $$widgetvar = $submenu if (defined($widgetvar) && ref($widgetvar)); +} + +sub menu +{ + my ($self,%args) = @_; + my $w = $self->parentMenu; + my $menu = $self->cget('-menu'); + if (!defined $menu) + { + require Tk::Menu; + $w->ColorOptions(\%args); + my $name = $self->cget('-label'); + warn "Had to (re-)reate menu for $name"; + $menu = $w->Menu(Name => $name, %args); + $self->configure('-menu'=>$menu); + } + else + { + $menu->configure(%args) if %args; + } + return $menu; +} + +# Some convenience methods + +sub separator { shift->menu->Separator(@_); } +sub command { shift->menu->Command(@_); } +sub cascade { shift->menu->Cascade(@_); } +sub checkbutton { shift->menu->Checkbutton(@_); } +sub radiobutton { shift->menu->Radiobutton(@_); } + +sub pack +{ + my $w = shift; + if ($^W) + { + require Carp; + Carp::carp("Cannot 'pack' $w - done automatically") + } +} + +package Tk::Menu::Checkbutton; +use base qw(Tk::Menu::Item); +Construct Tk::Menu 'Checkbutton'; +sub kind { return 'checkbutton' } + +package Tk::Menu::Radiobutton; +use base qw(Tk::Menu::Item); +Construct Tk::Menu 'Radiobutton'; +sub kind { return 'radiobutton' } + +package Tk::Menu::Item; + +1; +__END__ + +=cut + diff --git a/Master/tlpkg/installer/perllib/Tk/ProgressBar.pm b/Master/tlpkg/installer/perllib/Tk/ProgressBar.pm new file mode 100644 index 00000000000..206d843ea13 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/ProgressBar.pm @@ -0,0 +1,498 @@ +package Tk::ProgressBar; + +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/; + +use Tk; +use Tk::Canvas; +use Tk::Trace; +use Carp; +use strict; + +use base qw(Tk::Derived Tk::Canvas); + +Construct Tk::Widget 'ProgressBar'; + +sub ClassInit { + my ($class,$mw) = @_; + + $class->SUPER::ClassInit($mw); + + $mw->bind($class,'<Configure>', ['_layoutRequest',1]); +} + + +sub Populate { + my($c,$args) = @_; + + $c->ConfigSpecs( + -width => [PASSIVE => undef, undef, 0], + '-length' => [PASSIVE => undef, undef, 0], + -from => [PASSIVE => undef, undef, 0], + -to => [PASSIVE => undef, undef, 100], + -blocks => [PASSIVE => undef, undef, 10], + -padx => [PASSIVE => 'padX', 'Pad', 0], + -pady => [PASSIVE => 'padY', 'Pad', 0], + -gap => [PASSIVE => undef, undef, 1], + -colors => [PASSIVE => undef, undef, undef], + -relief => [SELF => 'relief', 'Relief', 'sunken'], + -value => [METHOD => undef, undef, undef], + -variable => [METHOD => undef, undef, undef], + -anchor => [METHOD => 'anchor', 'Anchor', 'w'], + -resolution + => [PASSIVE => undef, undef, 1.0], + -highlightthickness + => [SELF => 'highlightThickness','HighlightThickness',0], + -troughcolor + => [PASSIVE => 'troughColor', 'Background', 'grey55'], + ); + _layoutRequest($c,1); + $c->OnDestroy(['Destroyed' => $c]); +} + +sub anchor { + my $c = shift; + my $var = \$c->{Configure}{'-anchor'}; + my $old = $$var; + + if(@_) { + my $new = shift; + croak "bad anchor position \"$new\": must be n, s, w or e" + unless $new =~ /^[news]$/; + $$var = $new; + } + + $old; +} + +sub _layoutRequest { + my $c = shift; + my $why = shift; + $c->afterIdle(['_arrange',$c]) unless $c->{'layout_pending'}; + $c->{'layout_pending'} |= $why; +} + +sub _arrange { + my $c = shift; + my $why = $c->{'layout_pending'}; + + $c->{'layout_pending'} = 0; + + my $w = $c->Width; + my $h = $c->Height; + my $bw = $c->cget('-borderwidth') + $c->cget('-highlightthickness'); + my $x = abs(int($c->{Configure}{'-padx'})) + $bw; + my $y = abs(int($c->{Configure}{'-pady'})) + $bw; + my $value = $c->value; + my $from = $c->{Configure}{'-from'}; + my $to = $c->{Configure}{'-to'}; + my $horz = $c->{Configure}{'-anchor'} =~ /[ew]/i ? 1 : 0; + my $dir = $c->{Configure}{'-anchor'} =~ /[se]/i ? -1 : 1; + + my($minv,$maxv) = $from < $to ? ($from,$to) : ($to,$from); + + if($w == 1 && $h == 1) { + my $bw = $c->cget('-borderwidth'); + my $defw = 10 + $y*2 + $bw *2; + my $defl = ($maxv - $minv) + $x*2 + $bw*2; + + $h = $c->pixels($c->{Configure}{'-length'}) || $defl; + $w = $c->pixels($c->{Configure}{'-width'}) || $defw; + + ($w,$h) = ($h,$w) if $horz; + $c->GeometryRequest($w,$h); + $c->parent->update; + $c->update; + + $w = $c->Width; + $h = $c->Height; + } + + $w -= $x*2; + $h -= $y*2; + + my $length = $horz ? $w : $h; + my $width = $horz ? $h : $w; + + my $blocks = int($c->{Configure}{'-blocks'}); + my $gap = int($c->{Configure}{'-gap'}); + + $blocks = 1 if $blocks < 1; + + my $gwidth = $gap * ( $blocks - 1); + my $bwidth = ($length - $gwidth) / $blocks; + + if($bwidth < 3 || $blocks <= 1 || $gap <= 0) { + $blocks = 1; + $bwidth = $length; + $gap = 0; + } + + if($why & 1) { + my $colors = $c->{Configure}{'-colors'} || []; + my $bdir = $from < $to ? $dir : 0 - $dir; + + $c->delete($c->find('all')); + + $c->createRectangle(0,0,$w+$x*2,$h+$y*2, + -fill => $c->{Configure}{'-troughcolor'}, + -width => 0, + -outline => undef); + + $c->{'cover'} = $c->createRectangle($x,$y,$w,$h, + -fill => $c->{Configure}{'-troughcolor'}, + -width => 0, + -outline => undef); + + my($x0,$y0,$x1,$y1); + + if($horz) { + if($bdir > 0) { + ($x0,$y0) = ($x - $gap,$y); + } + else { + ($x0,$y0) = ($length + $x + $gap,$y); + } + ($x1,$y1) = ($x0,$y0 + $width); + } + else { + if($bdir > 0) { + ($x0,$y0) = ($x,$y - $gap); + } + else { + ($x0,$y0) = ($x,$length + $y + $gap); + } + ($x1,$y1) = ($x0 + $width,$y0); + } + + my $blks = $blocks; + my $dval = ($maxv - $minv) / $blocks; + my $color = $c->cget('-foreground'); + my $pos = 0; + my $val = $minv; + + while($val < $maxv) { + my($bw,$nval); + + while(($pos < @$colors) && $colors->[$pos] <= $val) { + $color = $colors->[$pos+1]; + $pos += 2; + } + + if($blocks == 1) { + $nval = defined($colors->[$pos]) + ? $colors->[$pos] : $maxv; + $bw = (($nval - $val) / ($maxv - $minv)) * $length; + } + else { + $bw = $bwidth; + $nval = $val + $dval if($blocks > 1); + } + + if($horz) { + if($bdir > 0) { + $x0 = $x1 + $gap; + $x1 = $x0 + $bw; + } + else { + $x1 = $x0 - $gap; + $x0 = $x1 - $bw; + } + } + else { + if($bdir > 0) { + $y0 = $y1 + $gap; + $y1 = $y0 + $bw; + } + else { + $y1 = $y0 - $gap; + $y0 = $y1 - $bw; + } + } + + $c->createRectangle($x0,$y0,$x1,$y1, + -fill => $color, + -width => 0, + -outline => undef + ); + $val = $nval; + } + } + + my $cover = $c->{'cover'}; + my $ddir = $from > $to ? 1 : -1; + + if(($value <=> $to) == (0-$ddir)) { + $c->lower($cover); + } + elsif(($value <=> $from) == $ddir) { + $c->raise($cover); + my $x1 = $horz ? $x + $length : $x + $width; + my $y1 = $horz ? $y + $width : $y + $length; + $c->coords($cover,$x,$y,$x1,$y1); + } + else { + my $step; + $value = int($value / $step) * $step + if(defined($step = $c->{Configure}{'-resolution'}) && $step > 0); + + $maxv = $minv+1 + if $minv == $maxv; + + my $range = $maxv - $minv; + my $bval = $range / $blocks; + my $offset = abs($value - $from); + my $ioff = int($offset / $bval); + my $start = $ioff * ($bwidth + $gap); + $start += ($offset - ($ioff * $bval)) / $bval * $bwidth; + + my($x0,$x1,$y0,$y1); + + if($horz) { + $y0 = $y; + $y1 = $y + $h; + if($dir > 0) { + $x0 = $x + $start; + $x1 = $x + $w; + } + else { + $x0 = $x; + $x1 = $w + $x - $start; + } + } + else { + $x0 = $x; + $x1 = $x + $w; + if($dir > 0) { + $y0 = $y + $start; + $y1 = $y + $h; + } + else { + $y0 = $y; + $y1 = $h + $y - $start; + } + } + + + $c->raise($cover); + $c->coords($cover,$x0,$y0,$x1,$y1); + } +} + +sub value { + my $c = shift; + my $val = defined($c->{'-variable'}) + ? $c->{'-variable'} + : \$c->{'-value'}; + my $old = defined($$val) ? $$val : $c->{Configure}{'-from'}; + + if(@_) { + my $value = shift; + $$val = defined($value) ? $value : $c->{Configure}{'-from'}; + _layoutRequest($c,2); + } + + $old; +} + +sub variable { + my $c = shift; + my $oldvarref = $c->{'-variable'}; + my $oldval = $$oldvarref if $oldvarref; + if(@_) { + my $varref = shift; + if ($oldvarref) + { + $c->traceVdelete($oldvarref); + } + $c->{'-variable'} = $varref; + $c->traceVariable($varref, 'w', sub { $c->value($_[1]) }); + $$varref = $oldval; + _layoutRequest($c,2); + } + $oldval; +} + +sub Destroyed +{ + my $c = shift; + my $var = delete $c->{'-variable'}; + $c->traceVdelete($var); +} + +1; +__END__ + +=head1 NAME + +Tk::ProgressBar - A graphical progress bar + +=for category Derived Widgets + +=head1 SYNOPSIS + + use Tk::ProgressBar; + + $progress = $parent->ProgressBar( + -width => 200, + -length => 20, + -anchor => 's', + -from => 0, + -to => 100, + -blocks => 10, + -colors => [0, 'green', 50, 'yellow' , 80, 'red'], + -variable => \$percent_done + ); + + $progress->value($position); + +=head1 DESCRIPTION + +B<Tk::ProgressBar> provides a widget which will show a graphical representation +of a value, given maximum and minimum reference values. + +=head1 STANDARD OPTIONS + +The following standard widget options are supported: + +=over 4 + +=item B<-borderwidth> + +=item B<-highlightthickness> + +Defaults to 0. + +=item B<-padx> + +Defaults to 0. + +=item B<-pady> + +Defaults to 0. + +=item B<-relief> + +Defaults to C<sunken> + +=item B<-troughcolor> + +The color to be used for the background (trough) of the progress bar. +Default is to use grey55. + +=back + +=head1 WIDGET-SPECIFIC OPTIONS + +=over 4 + +=item B<-anchor> + +This can be used to position the start point of the bar. Default +is 'w' (horizontal bar starting from the left). A vertical bar can be +configured by using either 's' or 'n'. + +=item B<-blocks> + +This controls the number of blocks to be used to construct the progress +bar. The default is to break the bar into 10 blocks. + +=item B<-colors> + +Controls the colors to be used for different positions of the progress bar. +The colors should be supplied as a reference to an array containing pairs +of positions and colors. + + -colors => [ 0, 'green', 50, 'red' ] + +means that for the range 0 to 50 the progress bar should be green +and for higher values it should be red. + + +=item B<-from> + +This sets the lower limit of the progress bar. If the bar is set to a +value below the lower limt no bar will be displayed. Defaults to 0. +See the C<-to> description for more information. + +=item B<-gap> + +This is the spacing (in pixels) between each block. Defaults to 1. +Use 0 to get a continuous bar. + + +=item B<-length> + +Specifies the desired long dimension of the ProgressBar in screen +units (i.e. any of the forms acceptable to Tk_GetPixels). For vertical +ProgressBars this is the ProgressBars height; for horizontal scales it +is the ProgressBars width. The default length is calculated from the +values of C<-padx>, C<-borderwidth>, C<-highlightthickness> and the +difference between C<-from> and C<-to>. + + +=item B<-resolution> + +A real value specifying the resolution for the scale. If this value is greater +than zero then the scale's value will always be rounded to an even multiple of +this value, as will tick marks and the endpoints of the scale. If the value is +less than zero then no rounding occurs. Defaults to 1 (i.e., the value will be +integral). + +=item B<-to> + +This sets the upper limit of the progress bar. If a value is specified +(for example, using the C<value> method) that lies above this value the +full progress bar will be displayed. Defaults to 100. + + + +=item B<-variable> + +Specifies the reference to a scalar variable to link to the ProgressBar. +Whenever the value of the variable changes, the ProgressBar will upate +to reflect this value. (See also the B<value> method below.) + +=item B<-value> + +The can be used to set the current position of the progress bar +when used in conjunction with the standard C<configure>. It is +usually recommended to use the B<value> method instead. + + +=item B<-width> + +Specifies the desired narrow dimension of the ProgressBar in screen +units (i.e. any of the forms acceptable to Tk_GetPixels). For +vertical ProgressBars this is the ProgressBars width; for horizontal +bars this is the ProgressBars height. The default width is derived +from the values of C<-borderwidth> and C<-pady> and C<-highlightthickness>. + +=back + +=head1 WIDGET METHODS + +=over 4 + +=item I<$ProgressBar>-E<gt>B<value>(?I<value>?) + +If I<value> is omitted, returns the current value of the ProgressBar. If +I<value> is given, the value of the ProgressBar is set. If I<$value> is +given but undefined the value of the option B<-from> is used. + +=back + + +=head1 AUTHOR + +Graham Barr E<lt>F<gbarr@pobox.com>E<gt> + +=head1 COPYRIGHT + +Copyright (c) 1997-1998 Graham Barr. All rights reserved. +This program is free software; you can redistribute it and/or modify it +under the same terms as Perl itself. + +=cut + + diff --git a/Master/tlpkg/installer/perllib/Tk/ROText.pm b/Master/tlpkg/installer/perllib/Tk/ROText.pm new file mode 100644 index 00000000000..cc5634f5475 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/ROText.pm @@ -0,0 +1,43 @@ +# Copyright (c) 1995-2003 Nick Ing-Simmons. All rights reserved. +# This program is free software; you can redistribute it and/or +# modify it under the same terms as Perl itself. +package Tk::ROText; + +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #10 $ =~ /\D(\d+)\s*$/; + +use Tk::Text; +use base qw(Tk::Derived Tk::Text); + +Construct Tk::Widget 'ROText'; + +sub clipEvents +{ + return qw[Copy]; +} + +sub ClassInit +{ + my ($class,$mw) = @_; + my $val = $class->bindRdOnly($mw); + my $cb = $mw->bind($class,'<Next>'); + $mw->bind($class,'<space>',$cb) if (defined $cb); + $cb = $mw->bind($class,'<Prior>'); + $mw->bind($class,'<BackSpace>',$cb) if (defined $cb); + $class->clipboardOperations($mw,'Copy'); + return $val; +} + +sub Populate { + my($self,$args) = @_; + $self->SUPER::Populate($args); + my $m = $self->menu->entrycget($self->menu->index('Search'), '-menu'); + $m->delete($m->index('Replace')); +} + +sub Tk::Widget::ScrlROText { shift->Scrolled('ROText' => @_) } + +1; + +__END__ + diff --git a/Master/tlpkg/installer/perllib/Tk/Scrollbar.pm b/Master/tlpkg/installer/perllib/Tk/Scrollbar.pm new file mode 100644 index 00000000000..6b416e04b30 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Scrollbar.pm @@ -0,0 +1,429 @@ +# Conversion from Tk4.0 scrollbar.tcl competed. +package Tk::Scrollbar; + +use vars qw($VERSION); +$VERSION = '4.010'; # $Id: //depot/Tkutf8/Scrollbar/Scrollbar.pm#10 $ + +use Tk qw($XS_VERSION Ev); +use AutoLoader; + +use base qw(Tk::Widget); + +#use strict; +#use vars qw($pressX $pressY @initValues $initPos $activeBg); + +Construct Tk::Widget 'Scrollbar'; + +bootstrap Tk::Scrollbar; + +sub Tk_cmd { \&Tk::scrollbar } + +Tk::Methods('activate','delta','fraction','get','identify','set'); + +sub Needed +{ + my ($sb) = @_; + my @val = $sb->get; + return 1 unless (@val == 2); + return 1 if $val[0] != 0.0; + return 1 if $val[1] != 1.0; + return 0; +} + + +sub ClassInit +{ + my ($class,$mw) = @_; + $mw->bind($class, '<Enter>', 'Enter'); + $mw->bind($class, '<Motion>', 'Motion'); + $mw->bind($class, '<Leave>', 'Leave'); + + $mw->bind($class, '<1>', 'ButtonDown'); + $mw->bind($class, '<B1-Motion>', ['Drag', Ev('x'), Ev('y')]); + $mw->bind($class, '<ButtonRelease-1>', 'ButtonUp'); + $mw->bind($class, '<B1-Leave>', 'NoOp'); # prevent generic <Leave> + $mw->bind($class, '<B1-Enter>', 'NoOp'); # prevent generic <Enter> + $mw->bind($class, '<Control-1>', 'ScrlTopBottom'); + + $mw->bind($class, '<2>', 'ButtonDown'); + $mw->bind($class, '<B2-Motion>', ['Drag', Ev('x'), Ev('y')]); + $mw->bind($class, '<ButtonRelease-2>', 'ButtonUp'); + $mw->bind($class, '<B2-Leave>', 'NoOp'); # prevent generic <Leave> + $mw->bind($class, '<B2-Enter>', 'NoOp'); # prevent generic <Enter> + $mw->bind($class, '<Control-2>', 'ScrlTopBottom'); + + $mw->bind($class, '<Up>', ['ScrlByUnits','v',-1]); + $mw->bind($class, '<Down>', ['ScrlByUnits','v', 1]); + $mw->bind($class, '<Control-Up>', ['ScrlByPages','v',-1]); + $mw->bind($class, '<Control-Down>', ['ScrlByPages','v', 1]); + + $mw->bind($class, '<Left>', ['ScrlByUnits','h',-1]); + $mw->bind($class, '<Right>', ['ScrlByUnits','h', 1]); + $mw->bind($class, '<Control-Left>', ['ScrlByPages','h',-1]); + $mw->bind($class, '<Control-Right>', ['ScrlByPages','h', 1]); + + $mw->bind($class, '<Prior>', ['ScrlByPages','hv',-1]); + $mw->bind($class, '<Next>', ['ScrlByPages','hv', 1]); + + # X11 mousewheel - honour for horizontal too. + $mw->bind($class, '<4>', ['ScrlByUnits','hv',-5]); + $mw->bind($class, '<5>', ['ScrlByUnits','hv', 5]); + + $mw->bind($class, '<Home>', ['ScrlToPos', 0]); + $mw->bind($class, '<End>', ['ScrlToPos', 1]); + + $mw->bind($class, '<4>', ['ScrlByUnits','v',-3]); + $mw->bind($class, '<5>', ['ScrlByUnits','v', 3]); + + return $class; + +} + +1; + +__END__ + +sub Enter +{ + my $w = shift; + my $e = $w->XEvent; + if ($Tk::strictMotif) + { + my $bg = $w->cget('-background'); + $activeBg = $w->cget('-activebackground'); + $w->configure('-activebackground' => $bg); + } + $w->activate($w->identify($e->x,$e->y)); +} + +sub Leave +{ + my $w = shift; + if ($Tk::strictMotif) + { + $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ; + } + $w->activate(''); +} + +sub Motion +{ + my $w = shift; + my $e = $w->XEvent; + $w->activate($w->identify($e->x,$e->y)); +} + +# tkScrollButtonDown -- +# This procedure is invoked when a button is pressed in a scrollbar. +# It changes the way the scrollbar is displayed and takes actions +# depending on where the mouse is. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +sub ButtonDown +{my $w = shift; + my $e = $w->XEvent; + my $element = $w->identify($e->x,$e->y); + $w->configure('-activerelief' => 'sunken'); + if ($e->b == 1 and + (defined($element) && $element eq 'slider')) + { + $w->StartDrag($e->x,$e->y); + } + elsif ($e->b == 2 and + (defined($element) && $element =~ /^(trough[12]|slider)$/o)) + { + my $pos = $w->fraction($e->x, $e->y); + my($head, $tail) = $w->get; + my $len = $tail - $head; + + $head = $pos - $len/2; + $tail = $pos + $len/2; + if ($head < 0) { + $head = 0; + $tail = $len; + } + elsif ($tail > 1) { + $head = 1 - $len; + $tail = 1; + } + $w->ScrlToPos($head); + $w->set($head, $tail); + + $w->StartDrag($e->x,$e->y); + } + else + { + $w->Select($element,'initial'); + } +} + +# tkScrollButtonUp -- +# This procedure is invoked when a button is released in a scrollbar. +# It cancels scans and auto-repeats that were in progress, and restores +# the way the active element is displayed. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +sub ButtonUp +{my $w = shift; + my $e = $w->XEvent; + $w->CancelRepeat; + $w->configure('-activerelief' => 'raised'); + $w->EndDrag($e->x,$e->y); + $w->activate($w->identify($e->x,$e->y)); +} + +# tkScrollSelect -- +# This procedure is invoked when button 1 is pressed over the scrollbar. +# It invokes one of several scrolling actions depending on where in +# the scrollbar the button was pressed. +# +# Arguments: +# w - The scrollbar widget. +# element - The element of the scrollbar that was selected, such +# as "arrow1" or "trough2". Shouldn't be "slider". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +sub Select +{ + my $w = shift; + my $element = shift; + my $repeat = shift; + return unless defined ($element); + if ($element eq 'arrow1') + { + $w->ScrlByUnits('hv',-1); + } + elsif ($element eq 'trough1') + { + $w->ScrlByPages('hv',-1); + } + elsif ($element eq 'trough2') + { + $w->ScrlByPages('hv', 1); + } + elsif ($element eq 'arrow2') + { + $w->ScrlByUnits('hv', 1); + } + else + { + return; + } + + if ($repeat eq 'again') + { + $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again'])); + } + elsif ($repeat eq 'initial') + { + $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again'])); + } +} + +# tkScrollStartDrag -- +# This procedure is called to initiate a drag of the slider. It just +# remembers the starting position of the slider. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the start of the drag operation. + +sub StartDrag +{ + my($w,$x,$y) = @_; + return unless (defined ($w->cget('-command'))); + $pressX = $x; + $pressY = $y; + @initValues = $w->get; + my $iv0 = $initValues[0]; + if (@initValues == 2) + { + $initPos = $iv0; + } + elsif ($iv0 == 0) + { + $initPos = 0; + } + else + { + $initPos = $initValues[2]/$initValues[0]; + } +} + +# tkScrollDrag -- +# This procedure is called for each mouse motion even when the slider +# is being dragged. It notifies the associated widget if we're not +# jump scrolling, and it just updates the scrollbar if we are jump +# scrolling. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The current mouse position. + +sub Drag +{ + my($w,$x,$y) = @_; + return if !defined $initPos; + my $delta = $w->delta($x-$pressX, $y-$pressY); + if ($w->cget('-jump')) + { + if (@initValues == 2) + { + $w->set($initValues[0]+$delta, $initValues[1]+$delta); + } + else + { + $delta = sprintf "%d", $delta * $initValues[0]; # round() + $initValues[2] += $delta; + $initValues[3] += $delta; + $w->set(@initValues[2,3]); + } + } + else + { + $w->ScrlToPos($initPos+$delta); + } +} + +# tkScrollEndDrag -- +# This procedure is called to end an interactive drag of the slider. +# It scrolls the window if we're in jump mode, otherwise it does nothing. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the end of the drag operation. + +sub EndDrag +{ + my($w,$x,$y) = @_; + return if (!defined $initPos); + if ($w->cget('-jump')) + { + my $delta = $w->delta($x-$pressX, $y-$pressY); + $w->ScrlToPos($initPos+$delta); + } + undef $initPos; +} + +# tkScrlByUnits -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of units. It notifies the associated widget +# in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many units to scroll: typically 1 or -1. + +sub ScrlByUnits +{my $w = shift; + my $orient = shift; + my $amount = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + return if (index($orient,substr($w->cget('-orient'),0,1)) < 0); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('scroll',$amount,'units'); + } + else + { + $cmd->Call($info[2]+$amount); + } +} + +# tkScrlByPages -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of screenfuls. It notifies the associated +# widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many screens to scroll: typically 1 or -1. + +sub ScrlByPages +{ + my $w = shift; + my $orient = shift; + my $amount = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + return if (index($orient,substr($w->cget('-orient'),0,1)) < 0); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('scroll',$amount,'pages'); + } + else + { + $cmd->Call($info[2]+$amount*($info[1]-1)); + } +} + +# tkScrlToPos -- +# This procedure tells the scrollbar's associated widget to scroll to +# a particular location, given by a fraction between 0 and 1. It notifies +# the associated widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# pos - A fraction between 0 and 1 indicating a desired position +# in the document. + +sub ScrlToPos +{ + my $w = shift; + my $pos = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('moveto',$pos); + } + else + { + $cmd->Call(int($info[0]*$pos)); + } +} + +# tkScrlTopBottom +# Scroll to the top or bottom of the document, depending on the mouse +# position. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +sub ScrlTopBottom +{ + my $w = shift; + my $e = $w->XEvent; + my $element = $w->identify($e->x,$e->y); + return unless ($element); + if ($element =~ /1$/) + { + $w->ScrlToPos(0); + } + elsif ($element =~ /2$/) + { + $w->ScrlToPos(1); + } +} + + + + diff --git a/Master/tlpkg/installer/perllib/Tk/Text.pm b/Master/tlpkg/installer/perllib/Tk/Text.pm new file mode 100644 index 00000000000..fe0aa0bf4c1 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Text.pm @@ -0,0 +1,1653 @@ +# text.tcl -- +# +# This file defines the default bindings for Tk text widgets. +# +# @(#) text.tcl 1.18 94/12/17 16:05:26 +# +# Copyright (c) 1992-1994 The Regents of the University of California. +# Copyright (c) 1994 Sun Microsystems, Inc. +# perl/Tk version: +# Copyright (c) 1995-2004 Nick Ing-Simmons +# Copyright (c) 1999 Greg London +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +package Tk::Text; +use AutoLoader; +use Carp; +use strict; + +use Text::Tabs; + +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #24 $ =~ /\D(\d+)\s*$/; + +use Tk qw(Ev $XS_VERSION); +use base qw(Tk::Clipboard Tk::Widget); + +Construct Tk::Widget 'Text'; + +bootstrap Tk::Text; + +sub Tk_cmd { \&Tk::text } + +sub Tk::Widget::ScrlText { shift->Scrolled('Text' => @_) } + +Tk::Methods('bbox','compare','debug','delete','dlineinfo','dump','edit', + 'get','image','index','insert','mark','scan','search', + 'see','tag','window','xview','yview'); + +use Tk::Submethods ( 'mark' => [qw(gravity names next previous set unset)], + 'scan' => [qw(mark dragto)], + 'tag' => [qw(add bind cget configure delete lower + names nextrange prevrange raise ranges remove)], + 'window' => [qw(cget configure create names)], + 'image' => [qw(cget configure create names)], + 'xview' => [qw(moveto scroll)], + 'yview' => [qw(moveto scroll)], + 'edit' => [qw(modified redo reset separator undo)], + ); + +sub Tag; +sub Tags; + +sub bindRdOnly +{ + + my ($class,$mw) = @_; + + # Standard Motif bindings: + $mw->bind($class,'<Meta-B1-Motion>','NoOp'); + $mw->bind($class,'<Meta-1>','NoOp'); + $mw->bind($class,'<Alt-KeyPress>','NoOp'); + $mw->bind($class,'<Escape>','unselectAll'); + + $mw->bind($class,'<1>',['Button1',Ev('x'),Ev('y')]); + $mw->bind($class,'<B1-Motion>','B1_Motion' ) ; + $mw->bind($class,'<B1-Leave>','B1_Leave' ) ; + $mw->bind($class,'<B1-Enter>','CancelRepeat'); + $mw->bind($class,'<ButtonRelease-1>','CancelRepeat'); + $mw->bind($class,'<Control-1>',['markSet','insert',Ev('@')]); + + $mw->bind($class,'<Double-1>','selectWord' ) ; + $mw->bind($class,'<Triple-1>','selectLine' ) ; + $mw->bind($class,'<Shift-1>','adjustSelect' ) ; + $mw->bind($class,'<Double-Shift-1>',['SelectTo',Ev('@'),'word']); + $mw->bind($class,'<Triple-Shift-1>',['SelectTo',Ev('@'),'line']); + + $mw->bind($class,'<Left>',['SetCursor',Ev('index','insert-1c')]); + $mw->bind($class,'<Shift-Left>',['KeySelect',Ev('index','insert-1c')]); + $mw->bind($class,'<Control-Left>',['SetCursor',Ev('index','insert-1c wordstart')]); + $mw->bind($class,'<Shift-Control-Left>',['KeySelect',Ev('index','insert-1c wordstart')]); + + $mw->bind($class,'<Right>',['SetCursor',Ev('index','insert+1c')]); + $mw->bind($class,'<Shift-Right>',['KeySelect',Ev('index','insert+1c')]); + $mw->bind($class,'<Control-Right>',['SetCursor',Ev('index','insert+1c wordend')]); + $mw->bind($class,'<Shift-Control-Right>',['KeySelect',Ev('index','insert wordend')]); + + $mw->bind($class,'<Up>',['SetCursor',Ev('UpDownLine',-1)]); + $mw->bind($class,'<Shift-Up>',['KeySelect',Ev('UpDownLine',-1)]); + $mw->bind($class,'<Control-Up>',['SetCursor',Ev('PrevPara','insert')]); + $mw->bind($class,'<Shift-Control-Up>',['KeySelect',Ev('PrevPara','insert')]); + + $mw->bind($class,'<Down>',['SetCursor',Ev('UpDownLine',1)]); + $mw->bind($class,'<Shift-Down>',['KeySelect',Ev('UpDownLine',1)]); + $mw->bind($class,'<Control-Down>',['SetCursor',Ev('NextPara','insert')]); + $mw->bind($class,'<Shift-Control-Down>',['KeySelect',Ev('NextPara','insert')]); + + $mw->bind($class,'<Home>',['SetCursor','insert linestart']); + $mw->bind($class,'<Shift-Home>',['KeySelect','insert linestart']); + $mw->bind($class,'<Control-Home>',['SetCursor','1.0']); + $mw->bind($class,'<Control-Shift-Home>',['KeySelect','1.0']); + + $mw->bind($class,'<End>',['SetCursor','insert lineend']); + $mw->bind($class,'<Shift-End>',['KeySelect','insert lineend']); + $mw->bind($class,'<Control-End>',['SetCursor','end-1char']); + $mw->bind($class,'<Control-Shift-End>',['KeySelect','end-1char']); + + $mw->bind($class,'<Prior>',['SetCursor',Ev('ScrollPages',-1)]); + $mw->bind($class,'<Shift-Prior>',['KeySelect',Ev('ScrollPages',-1)]); + $mw->bind($class,'<Control-Prior>',['xview','scroll',-1,'page']); + + $mw->bind($class,'<Next>',['SetCursor',Ev('ScrollPages',1)]); + $mw->bind($class,'<Shift-Next>',['KeySelect',Ev('ScrollPages',1)]); + $mw->bind($class,'<Control-Next>',['xview','scroll',1,'page']); + + $mw->bind($class,'<Shift-Tab>', 'NoOp'); # Needed only to keep <Tab> binding from triggering; does not have to actually do anything. + $mw->bind($class,'<Control-Tab>','focusNext'); + $mw->bind($class,'<Control-Shift-Tab>','focusPrev'); + + $mw->bind($class,'<Control-space>',['markSet','anchor','insert']); + $mw->bind($class,'<Select>',['markSet','anchor','insert']); + $mw->bind($class,'<Control-Shift-space>',['SelectTo','insert','char']); + $mw->bind($class,'<Shift-Select>',['SelectTo','insert','char']); + $mw->bind($class,'<Control-slash>','selectAll'); + $mw->bind($class,'<Control-backslash>','unselectAll'); + + if (!$Tk::strictMotif) + { + $mw->bind($class,'<Control-a>', ['SetCursor','insert linestart']); + $mw->bind($class,'<Control-b>', ['SetCursor','insert-1c']); + $mw->bind($class,'<Control-e>', ['SetCursor','insert lineend']); + $mw->bind($class,'<Control-f>', ['SetCursor','insert+1c']); + $mw->bind($class,'<Meta-b>', ['SetCursor','insert-1c wordstart']); + $mw->bind($class,'<Meta-f>', ['SetCursor','insert wordend']); + $mw->bind($class,'<Meta-less>', ['SetCursor','1.0']); + $mw->bind($class,'<Meta-greater>', ['SetCursor','end-1c']); + + $mw->bind($class,'<Control-n>', ['SetCursor',Ev('UpDownLine',1)]); + $mw->bind($class,'<Control-p>', ['SetCursor',Ev('UpDownLine',-1)]); + + $mw->bind($class,'<2>',['Button2',Ev('x'),Ev('y')]); + $mw->bind($class,'<B2-Motion>',['Motion2',Ev('x'),Ev('y')]); + } + $mw->bind($class,'<Destroy>','Destroy'); + $mw->bind($class, '<3>', ['PostPopupMenu', Ev('X'), Ev('Y')] ); + $mw->YMouseWheelBind($class); + $mw->XMouseWheelBind($class); + + $mw->MouseWheelBind($class); + + return $class; +} + +sub selectAll +{ + my ($w) = @_; + $w->tagAdd('sel','1.0','end'); +} + +sub unselectAll +{ + my ($w) = @_; + $w->tagRemove('sel','1.0','end'); +} + +sub adjustSelect +{ + my ($w) = @_; + my $Ev = $w->XEvent; + $w->ResetAnchor($Ev->xy); + $w->SelectTo($Ev->xy,'char') +} + +sub selectLine +{ + my ($w) = @_; + my $Ev = $w->XEvent; + $w->SelectTo($Ev->xy,'line'); + Tk::catch { $w->markSet('insert','sel.first') }; +} + +sub selectWord +{ + my ($w) = @_; + my $Ev = $w->XEvent; + $w->SelectTo($Ev->xy,'word'); + Tk::catch { $w->markSet('insert','sel.first') } +} + +sub ClassInit +{ + my ($class,$mw) = @_; + $class->SUPER::ClassInit($mw); + + $class->bindRdOnly($mw); + + $mw->bind($class,'<Tab>', 'insertTab'); + $mw->bind($class,'<Control-i>', ['Insert',"\t"]); + $mw->bind($class,'<Return>', ['Insert',"\n"]); + $mw->bind($class,'<Delete>','Delete'); + $mw->bind($class,'<BackSpace>','Backspace'); + $mw->bind($class,'<Insert>', \&ToggleInsertMode ) ; + $mw->bind($class,'<KeyPress>',['InsertKeypress',Ev('A')]); + + $mw->bind($class,'<F1>', 'clipboardColumnCopy'); + $mw->bind($class,'<F2>', 'clipboardColumnCut'); + $mw->bind($class,'<F3>', 'clipboardColumnPaste'); + + # Additional emacs-like bindings: + + if (!$Tk::strictMotif) + { + $mw->bind($class,'<Control-d>',['delete','insert']); + $mw->bind($class,'<Control-k>','deleteToEndofLine') ; + $mw->bind($class,'<Control-o>','openLine'); + $mw->bind($class,'<Control-t>','Transpose'); + $mw->bind($class,'<Meta-d>',['delete','insert','insert wordend']); + $mw->bind($class,'<Meta-BackSpace>',['delete','insert-1c wordstart','insert']); + + # A few additional bindings of my own. + $mw->bind($class,'<Control-h>','deleteBefore'); + $mw->bind($class,'<ButtonRelease-2>','ButtonRelease2'); + } +#JD# $Tk::prevPos = undef; + return $class; +} + +sub insertTab +{ + my ($w) = @_; + $w->Insert("\t"); + $w->focus; + $w->break +} + +sub deleteToEndofLine +{ + my ($w) = @_; + if ($w->compare('insert','==','insert lineend')) + { + $w->delete('insert') + } + else + { + $w->delete('insert','insert lineend') + } +} + +sub openLine +{ + my ($w) = @_; + $w->insert('insert',"\n"); + $w->markSet('insert','insert-1c') +} + +sub Button2 +{ + my ($w,$x,$y) = @_; + $w->scan('mark',$x,$y); + $Tk::x = $x; + $Tk::y = $y; + $Tk::mouseMoved = 0; +} + +sub Motion2 +{ + my ($w,$x,$y) = @_; + $Tk::mouseMoved = 1 if ($x != $Tk::x || $y != $Tk::y); + $w->scan('dragto',$x,$y) if ($Tk::mouseMoved); +} + +sub ButtonRelease2 +{ + my ($w) = @_; + my $Ev = $w->XEvent; + if (!$Tk::mouseMoved) + { + Tk::catch { $w->insert($Ev->xy,$w->SelectionGet) } + } +} + +sub InsertSelection +{ + my ($w) = @_; + Tk::catch { $w->Insert($w->SelectionGet) } +} + +sub Backspace +{ + my ($w) = @_; + my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') }; + if (defined $sel) + { + $w->delete('sel.first','sel.last'); + return; + } + $w->deleteBefore; +} + +sub deleteBefore +{ + my ($w) = @_; + if ($w->compare('insert','!=','1.0')) + { + $w->delete('insert-1c'); + $w->see('insert') + } +} + +sub Delete +{ + my ($w) = @_; + my $sel = Tk::catch { $w->tag('nextrange','sel','1.0','end') }; + if (defined $sel) + { + $w->delete('sel.first','sel.last') + } + else + { + $w->delete('insert'); + $w->see('insert') + } +} + +# Button1 -- +# This procedure is invoked to handle button-1 presses in text +# widgets. It moves the insertion cursor, sets the selection anchor, +# and claims the input focus. +# +# Arguments: +# w - The text window in which the button was pressed. +# x - The x-coordinate of the button press. +# y - The x-coordinate of the button press. +sub Button1 +{ + my ($w,$x,$y) = @_; + $Tk::selectMode = 'char'; + $Tk::mouseMoved = 0; + $w->SetCursor('@'.$x.','.$y); + $w->markSet('anchor','insert'); + $w->focus() if ($w->cget('-state') eq 'normal'); +} + +sub B1_Motion +{ + my ($w) = @_; + return unless defined $Tk::mouseMoved; + my $Ev = $w->XEvent; + $Tk::x = $Ev->x; + $Tk::y = $Ev->y; + $w->SelectTo($Ev->xy) +} + +sub B1_Leave +{ + my ($w) = @_; + my $Ev = $w->XEvent; + $Tk::x = $Ev->x; + $Tk::y = $Ev->y; + $w->AutoScan; +} + +# SelectTo -- +# This procedure is invoked to extend the selection, typically when +# dragging it with the mouse. Depending on the selection mode (character, +# word, line) it selects in different-sized units. This procedure +# ignores mouse motions initially until the mouse has moved from +# one character to another or until there have been multiple clicks. +# +# Arguments: +# w - The text window in which the button was pressed. +# index - Index of character at which the mouse button was pressed. +sub SelectTo +{ + my ($w, $index, $mode)= @_; + $Tk::selectMode = $mode if defined ($mode); + my $cur = $w->index($index); + my $anchor = Tk::catch { $w->index('anchor') }; + if (!defined $anchor) + { + $w->markSet('anchor',$anchor = $cur); + $Tk::mouseMoved = 0; + } + elsif ($w->compare($cur,'!=',$anchor)) + { + $Tk::mouseMoved = 1; + } + $Tk::selectMode = 'char' unless (defined $Tk::selectMode); + $mode = $Tk::selectMode; + my ($first,$last); + if ($mode eq 'char') + { + if ($w->compare($cur,'<','anchor')) + { + $first = $cur; + $last = 'anchor'; + } + else + { + $first = 'anchor'; + $last = $cur + } + } + elsif ($mode eq 'word') + { + if ($w->compare($cur,'<','anchor')) + { + $first = $w->index("$cur wordstart"); + $last = $w->index('anchor - 1c wordend') + } + else + { + $first = $w->index('anchor wordstart'); + $last = $w->index("$cur wordend") + } + } + elsif ($mode eq 'line') + { + if ($w->compare($cur,'<','anchor')) + { + $first = $w->index("$cur linestart"); + $last = $w->index('anchor - 1c lineend + 1c') + } + else + { + $first = $w->index('anchor linestart'); + $last = $w->index("$cur lineend + 1c") + } + } + if ($Tk::mouseMoved || $Tk::selectMode ne 'char') + { + $w->tagRemove('sel','1.0',$first); + $w->tagAdd('sel',$first,$last); + $w->tagRemove('sel',$last,'end'); + $w->idletasks; + } +} +# AutoScan -- +# This procedure is invoked when the mouse leaves a text window +# with button 1 down. It scrolls the window up, down, left, or right, +# depending on where the mouse is (this information was saved in +# tkPriv(x) and tkPriv(y)), and reschedules itself as an 'after' +# command so that the window continues to scroll until the mouse +# moves back into the window or the mouse button is released. +# +# Arguments: +# w - The text window. +sub AutoScan +{ + my ($w) = @_; + if ($Tk::y >= $w->height) + { + $w->yview('scroll',2,'units') + } + elsif ($Tk::y < 0) + { + $w->yview('scroll',-2,'units') + } + elsif ($Tk::x >= $w->width) + { + $w->xview('scroll',2,'units') + } + elsif ($Tk::x < 0) + { + $w->xview('scroll',-2,'units') + } + else + { + return; + } + $w->SelectTo('@' . $Tk::x . ','. $Tk::y); + $w->RepeatId($w->after(50,['AutoScan',$w])); +} +# SetCursor +# Move the insertion cursor to a given position in a text. Also +# clears the selection, if there is one in the text, and makes sure +# that the insertion cursor is visible. +# +# Arguments: +# w - The text window. +# pos - The desired new position for the cursor in the window. +sub SetCursor +{ + my ($w,$pos) = @_; + $pos = 'end - 1 chars' if $w->compare($pos,'==','end'); + $w->markSet('insert',$pos); + $w->unselectAll; + $w->see('insert'); +} +# KeySelect +# This procedure is invoked when stroking out selections using the +# keyboard. It moves the cursor to a new position, then extends +# the selection to that position. +# +# Arguments: +# w - The text window. +# new - A new position for the insertion cursor (the cursor has not +# actually been moved to this position yet). +sub KeySelect +{ + my ($w,$new) = @_; + my ($first,$last); + if (!defined $w->tag('ranges','sel')) + { + # No selection yet + $w->markSet('anchor','insert'); + if ($w->compare($new,'<','insert')) + { + $w->tagAdd('sel',$new,'insert') + } + else + { + $w->tagAdd('sel','insert',$new) + } + } + else + { + # Selection exists + if ($w->compare($new,'<','anchor')) + { + $first = $new; + $last = 'anchor' + } + else + { + $first = 'anchor'; + $last = $new + } + $w->tagRemove('sel','1.0',$first); + $w->tagAdd('sel',$first,$last); + $w->tagRemove('sel',$last,'end') + } + $w->markSet('insert',$new); + $w->see('insert'); + $w->idletasks; +} +# ResetAnchor -- +# Set the selection anchor to whichever end is farthest from the +# index argument. One special trick: if the selection has two or +# fewer characters, just leave the anchor where it is. In this +# case it does not matter which point gets chosen for the anchor, +# and for the things like Shift-Left and Shift-Right this produces +# better behavior when the cursor moves back and forth across the +# anchor. +# +# Arguments: +# w - The text widget. +# index - Position at which mouse button was pressed, which determines +# which end of selection should be used as anchor point. +sub ResetAnchor +{ + my ($w,$index) = @_; + if (!defined $w->tag('ranges','sel')) + { + $w->markSet('anchor',$index); + return; + } + my $a = $w->index($index); + my $b = $w->index('sel.first'); + my $c = $w->index('sel.last'); + if ($w->compare($a,'<',$b)) + { + $w->markSet('anchor','sel.last'); + return; + } + if ($w->compare($a,'>',$c)) + { + $w->markSet('anchor','sel.first'); + return; + } + my ($lineA,$chA) = split(/\./,$a); + my ($lineB,$chB) = split(/\./,$b); + my ($lineC,$chC) = split(/\./,$c); + if ($lineB < $lineC+2) + { + my $total = length($w->get($b,$c)); + if ($total <= 2) + { + return; + } + if (length($w->get($b,$a)) < $total/2) + { + $w->markSet('anchor','sel.last') + } + else + { + $w->markSet('anchor','sel.first') + } + return; + } + if ($lineA-$lineB < $lineC-$lineA) + { + $w->markSet('anchor','sel.last') + } + else + { + $w->markSet('anchor','sel.first') + } +} + +######################################################################## +sub markExists +{ + my ($w, $markname)=@_; + my $mark_exists=0; + my @markNames_list = $w->markNames; + foreach my $mark (@markNames_list) + { if ($markname eq $mark) {$mark_exists=1;last;} } + return $mark_exists; +} + +######################################################################## +sub OverstrikeMode +{ + my ($w,$mode) = @_; + + $w->{'OVERSTRIKE_MODE'} =0 unless exists($w->{'OVERSTRIKE_MODE'}); + + $w->{'OVERSTRIKE_MODE'}=$mode if (@_ > 1); + + return $w->{'OVERSTRIKE_MODE'}; +} + +######################################################################## +# pressed the <Insert> key, just above 'Del' key. +# this toggles between insert mode and overstrike mode. +sub ToggleInsertMode +{ + my ($w)=@_; + $w->OverstrikeMode(!$w->OverstrikeMode); +} + +######################################################################## +sub InsertKeypress +{ + my ($w,$char)=@_; + return unless length($char); + if ($w->OverstrikeMode) + { + my $current=$w->get('insert'); + $w->delete('insert') unless($current eq "\n"); + } + $w->Insert($char); +} + +######################################################################## +sub GotoLineNumber +{ + my ($w,$line_number) = @_; + $line_number=~ s/^\s+|\s+$//g; + return if $line_number =~ m/\D/; + my ($last_line,$junk) = split(/\./, $w->index('end')); + if ($line_number > $last_line) {$line_number = $last_line; } + $w->{'LAST_GOTO_LINE'} = $line_number; + $w->markSet('insert', $line_number.'.0'); + $w->see('insert'); +} + +######################################################################## +sub GotoLineNumberPopUp +{ + my ($w)=@_; + my $popup = $w->{'GOTO_LINE_NUMBER_POPUP'}; + + unless (defined($w->{'LAST_GOTO_LINE'})) + { + my ($line,$col) = split(/\./, $w->index('insert')); + $w->{'LAST_GOTO_LINE'} = $line; + } + + ## if anything is selected when bring up the pop-up, put it in entry window. + my $selected; + eval { $selected = $w->SelectionGet(-selection => "PRIMARY"); }; + unless ($@) + { + if (defined($selected) and length($selected)) + { + unless ($selected =~ /\D/) + { + $w->{'LAST_GOTO_LINE'} = $selected; + } + } + } + unless (defined($popup)) + { + require Tk::DialogBox; + $popup = $w->DialogBox(-buttons => [qw[Ok Cancel]],-title => "Goto Line Number", -popover => $w, + -command => sub { $w->GotoLineNumber($w->{'LAST_GOTO_LINE'}) if $_[0] eq 'Ok'}); + $w->{'GOTO_LINE_NUMBER_POPUP'}=$popup; + $popup->resizable('no','no'); + my $frame = $popup->Frame->pack(-fill => 'x'); + $frame->Label(-text=>'Enter line number: ')->pack(-side => 'left'); + my $entry = $frame->Entry(-background=>'white', -width=>25, + -textvariable => \$w->{'LAST_GOTO_LINE'})->pack(-side =>'left',-fill => 'x'); + $popup->Advertise(entry => $entry); + } + $popup->Popup; + $popup->Subwidget('entry')->focus; + $popup->Wait; +} + +######################################################################## + +sub getSelected +{ + shift->GetTextTaggedWith('sel'); +} + +sub deleteSelected +{ + shift->DeleteTextTaggedWith('sel'); +} + +sub GetTextTaggedWith +{ + my ($w,$tag) = @_; + + my @ranges = $w->tagRanges($tag); + my $range_total = @ranges; + my $return_text=''; + + # if nothing selected, then ignore + if ($range_total == 0) {return $return_text;} + + # for every range-pair, get selected text + while(@ranges) + { + my $first = shift(@ranges); + my $last = shift(@ranges); + my $text = $w->get($first , $last); + if(defined($text)) + {$return_text = $return_text . $text;} + # if there is more tagged text, separate with an end of line character + if(@ranges) + {$return_text = $return_text . "\n";} + } + return $return_text; +} + +######################################################################## +sub DeleteTextTaggedWith +{ + my ($w,$tag) = @_; + my @ranges = $w->tagRanges($tag); + my $range_total = @ranges; + + # if nothing tagged with that tag, then ignore + if ($range_total == 0) {return;} + + # insert marks where selections are located + # marks will move with text even as text is inserted and deleted + # in a previous selection. + for (my $i=0; $i<$range_total; $i++) + { $w->markSet('mark_tag_'.$i => $ranges[$i]); } + + # for every selected mark pair, insert new text and delete old text + for (my $i=0; $i<$range_total; $i=$i+2) + { + my $first = $w->index('mark_tag_'.$i); + my $last = $w->index('mark_tag_'.($i+1)); + + my $text = $w->delete($first , $last); + } + + # delete the marks + for (my $i=0; $i<$range_total; $i++) + { $w->markUnset('mark_tag_'.$i); } +} + + +######################################################################## +sub FindAll +{ + my ($w,$mode, $case, $pattern ) = @_; + ### 'sel' tags accumulate, need to remove any previous existing + $w->unselectAll; + + my $match_length=0; + my $start_index; + my $end_index = '1.0'; + + while(defined($end_index)) + { + if ($case eq '-nocase') + { + $start_index = $w->search( + $mode, + $case, + -count => \$match_length, + "--", + $pattern , + $end_index, + 'end'); + } + else + { + $start_index = $w->search( + $mode, + -count => \$match_length, + "--", + $pattern , + $end_index, + 'end'); + } + + unless(defined($start_index) && $start_index) {last;} + + my ($line,$col) = split(/\./, $start_index); + $col = $col + $match_length; + $end_index = $line.'.'.$col; + $w->tagAdd('sel', $start_index, $end_index); + } +} + +######################################################################## +# get current selected text and search for the next occurrence +sub FindSelectionNext +{ + my ($w) = @_; + my $selected; + eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); }; + return if($@); + return unless (defined($selected) and length($selected)); + + $w->FindNext('-forward', '-exact', '-case', $selected); +} + +######################################################################## +# get current selected text and search for the previous occurrence +sub FindSelectionPrevious +{ + my ($w) = @_; + my $selected; + eval {$selected = $w->SelectionGet(-selection => "PRIMARY"); }; + return if($@); + return unless (defined($selected) and length($selected)); + + $w->FindNext('-backward', '-exact', '-case', $selected); +} + + + +######################################################################## +sub FindNext +{ + my ($w,$direction, $mode, $case, $pattern ) = @_; + + ## if searching forward, start search at end of selected block + ## if backward, start search from start of selected block. + ## dont want search to find currently selected text. + ## tag 'sel' may not be defined, use eval loop to trap error + eval { + if ($direction eq '-forward') + { + $w->markSet('insert', 'sel.last'); + $w->markSet('current', 'sel.last'); + } + else + { + $w->markSet('insert', 'sel.first'); + $w->markSet('current', 'sel.first'); + } + }; + + my $saved_index=$w->index('insert'); + + # remove any previous existing tags + $w->unselectAll; + + my $match_length=0; + my $start_index; + + if ($case eq '-nocase') + { + $start_index = $w->search( + $direction, + $mode, + $case, + -count => \$match_length, + "--", + $pattern , + 'insert'); + } + else + { + $start_index = $w->search( + $direction, + $mode, + -count => \$match_length, + "--", + $pattern , + 'insert'); + } + + unless(defined($start_index)) { return 0; } + if(length($start_index) == 0) { return 0; } + + my ($line,$col) = split(/\./, $start_index); + $col = $col + $match_length; + my $end_index = $line.'.'.$col; + $w->tagAdd('sel', $start_index, $end_index); + + $w->see($start_index); + + if ($direction eq '-forward') + { + $w->markSet('insert', $end_index); + $w->markSet('current', $end_index); + } + else + { + $w->markSet('insert', $start_index); + $w->markSet('current', $start_index); + } + + my $compared_index = $w->index('insert'); + + my $ret_val; + if ($compared_index eq $saved_index) + {$ret_val=0;} + else + {$ret_val=1;} + return $ret_val; +} + +######################################################################## +sub FindAndReplaceAll +{ + my ($w,$mode, $case, $find, $replace ) = @_; + $w->markSet('insert', '1.0'); + $w->unselectAll; + while($w->FindNext('-forward', $mode, $case, $find)) + { + $w->ReplaceSelectionsWith($replace); + } +} + +######################################################################## +sub ReplaceSelectionsWith +{ + my ($w,$new_text ) = @_; + + my @ranges = $w->tagRanges('sel'); + my $range_total = @ranges; + + # if nothing selected, then ignore + if ($range_total == 0) {return}; + + # insert marks where selections are located + # marks will move with text even as text is inserted and deleted + # in a previous selection. + for (my $i=0; $i<$range_total; $i++) + {$w->markSet('mark_sel_'.$i => $ranges[$i]); } + + # for every selected mark pair, insert new text and delete old text + my ($first, $last); + for (my $i=0; $i<$range_total; $i=$i+2) + { + $first = $w->index('mark_sel_'.$i); + $last = $w->index('mark_sel_'.($i+1)); + + ########################################################################## + # eventually, want to be able to get selected text, + # support regular expression matching, determine replace_text + # $replace_text = $selected_text=~m/$new_text/ (or whatever would work) + # will have to pass in mode and case flags. + # this would allow a regular expression search and replace to be performed + # example, look for "line (\d+):" and replace with "$1 >" or similar + ########################################################################## + + $w->insert($last, $new_text); + $w->delete($first, $last); + + } + ############################################################ + # set the insert cursor to the end of the last insertion mark + $w->markSet('insert',$w->index('mark_sel_'.($range_total-1))); + + # delete the marks + for (my $i=0; $i<$range_total; $i++) + { $w->markUnset('mark_sel_'.$i); } +} +######################################################################## +sub FindAndReplacePopUp +{ + my ($w)=@_; + $w->findandreplacepopup(0); +} + +######################################################################## +sub FindPopUp +{ + my ($w)=@_; + $w->findandreplacepopup(1); +} + +######################################################################## + +sub findandreplacepopup +{ + my ($w,$find_only)=@_; + + my $pop = $w->Toplevel; + $pop->transient($w->toplevel); + if ($find_only) + { $pop->title("Find"); } + else + { $pop->title("Find and/or Replace"); } + my $frame = $pop->Frame->pack(-anchor=>'nw'); + + $frame->Label(-text=>"Direction:") + ->grid(-row=> 1, -column=>1, -padx=> 20, -sticky => 'nw'); + my $direction = '-forward'; + $frame->Radiobutton( + -variable => \$direction, + -text => 'forward',-value => '-forward' ) + ->grid(-row=> 2, -column=>1, -padx=> 20, -sticky => 'nw'); + $frame->Radiobutton( + -variable => \$direction, + -text => 'backward',-value => '-backward' ) + ->grid(-row=> 3, -column=>1, -padx=> 20, -sticky => 'nw'); + + $frame->Label(-text=>"Mode:") + ->grid(-row=> 1, -column=>2, -padx=> 20, -sticky => 'nw'); + my $mode = '-exact'; + $frame->Radiobutton( + -variable => \$mode, -text => 'exact',-value => '-exact' ) + ->grid(-row=> 2, -column=>2, -padx=> 20, -sticky => 'nw'); + $frame->Radiobutton( + -variable => \$mode, -text => 'regexp',-value => '-regexp' ) + ->grid(-row=> 3, -column=>2, -padx=> 20, -sticky => 'nw'); + + $frame->Label(-text=>"Case:") + ->grid(-row=> 1, -column=>3, -padx=> 20, -sticky => 'nw'); + my $case = '-case'; + $frame->Radiobutton( + -variable => \$case, -text => 'case',-value => '-case' ) + ->grid(-row=> 2, -column=>3, -padx=> 20, -sticky => 'nw'); + $frame->Radiobutton( + -variable => \$case, -text => 'nocase',-value => '-nocase' ) + ->grid(-row=> 3, -column=>3, -padx=> 20, -sticky => 'nw'); + + ###################################################### + my $find_entry = $pop->Entry(-width=>25); + $find_entry->focus; + + my $donext = sub {$w->FindNext ($direction,$mode,$case,$find_entry->get())}; + + $find_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x'); # autosizing + + ###### if any $w text is selected, put it in the find entry + ###### could be more than one text block selected, get first selection + my @ranges = $w->tagRanges('sel'); + if (@ranges) + { + my $first = shift(@ranges); + my $last = shift(@ranges); + + # limit to one line + my ($first_line, $first_col) = split(/\./,$first); + my ($last_line, $last_col) = split(/\./,$last); + unless($first_line == $last_line) + {$last = $first. ' lineend';} + + $find_entry->insert('insert', $w->get($first , $last)); + } + else + { + my $selected; + eval {$selected=$w->SelectionGet(-selection => "PRIMARY"); }; + if($@) {} + elsif (defined($selected)) + {$find_entry->insert('insert', $selected);} + } + + $find_entry->icursor(0); + + my ($replace_entry,$button_replace,$button_replace_all); + unless ($find_only) + { + $replace_entry = $pop->Entry(-width=>25); + + $replace_entry -> pack(-anchor=>'nw', '-expand' => 'yes' , -fill => 'x'); + } + + + my $button_find = $pop->Button(-text=>'Find', -command => $donext, -default => 'active') + -> pack(-side => 'left'); + + my $button_find_all = $pop->Button(-text=>'Find All', + -command => sub {$w->FindAll($mode,$case,$find_entry->get());} ) + ->pack(-side => 'left'); + + unless ($find_only) + { + $button_replace = $pop->Button(-text=>'Replace', -default => 'normal', + -command => sub {$w->ReplaceSelectionsWith($replace_entry->get());} ) + -> pack(-side =>'left'); + $button_replace_all = $pop->Button(-text=>'Replace All', + -command => sub {$w->FindAndReplaceAll + ($mode,$case,$find_entry->get(),$replace_entry->get());} ) + ->pack(-side => 'left'); + } + + + my $button_cancel = $pop->Button(-text=>'Cancel', + -command => sub {$pop->destroy()} ) + ->pack(-side => 'left'); + + $find_entry->bind("<Return>" => [$button_find, 'invoke']); + $find_entry->bind("<Escape>" => [$button_cancel, 'invoke']); + + $find_entry->bind("<Return>" => [$button_find, 'invoke']); + $find_entry->bind("<Escape>" => [$button_cancel, 'invoke']); + + $pop->resizable('yes','no'); + return $pop; +} + +# paste clipboard into current location +sub clipboardPaste +{ + my ($w) = @_; + local $@; + Tk::catch { $w->Insert($w->clipboardGet) }; +} + +######################################################################## +# Insert -- +# Insert a string into a text at the point of the insertion cursor. +# If there is a selection in the text, and it covers the point of the +# insertion cursor, then delete the selection before inserting. +# +# Arguments: +# w - The text window in which to insert the string +# string - The string to insert (usually just a single character) +sub Insert +{ + my ($w,$string) = @_; + return unless (defined $string && $string ne ''); + #figure out if cursor is inside a selection + my @ranges = $w->tagRanges('sel'); + if (@ranges) + { + while (@ranges) + { + my ($first,$last) = splice(@ranges,0,2); + if ($w->compare($first,'<=','insert') && $w->compare($last,'>=','insert')) + { + $w->ReplaceSelectionsWith($string); + return; + } + } + } + # paste it at the current cursor location + $w->insert('insert',$string); + $w->see('insert'); +} + +# UpDownLine -- +# Returns the index of the character one *display* line above or below the +# insertion cursor. There are two tricky things here. First, +# we want to maintain the original column across repeated operations, +# even though some lines that will get passed through do not have +# enough characters to cover the original column. Second, do not +# try to scroll past the beginning or end of the text. +# +# This may have some weirdness associated with a proportional font. Ie. +# the insertion cursor will zigzag up or down according to the width of +# the character at destination. +# +# Arguments: +# w - The text window in which the cursor is to move. +# n - The number of lines to move: -1 for up one line, +# +1 for down one line. +sub UpDownLine +{ +my ($w,$n) = @_; +$w->see('insert'); +my $i = $w->index('insert'); + +my ($line,$char) = split(/\./,$i); + +my $testX; #used to check the "new" position +my $testY; #used to check the "new" position + +(my $bx, my $by, my $bw, my $bh) = $w->bbox($i); +(my $lx, my $ly, my $lw, my $lh) = $w->dlineinfo($i); + +if ( ($n == -1) and ($by <= $bh) ) + { + #On first display line.. so scroll up and recalculate.. + $w->yview('scroll', -1, 'units'); + unless (($w->yview)[0]) { + #first line of entire text - keep same position. + return $i; + } + ($bx, $by, $bw, $bh) = $w->bbox($i); + ($lx, $ly, $lw, $lh) = $w->dlineinfo($i); + } +elsif ( ($n == 1) and + ($ly + $lh) > ( $w->height - 2*$w->cget(-bd) - 2*$w->cget(-highlightthickness) ) ) + { + #On last display line.. so scroll down and recalculate.. + $w->yview('scroll', 1, 'units'); + ($bx, $by, $bw, $bh) = $w->bbox($i); + ($lx, $ly, $lw, $lh) = $w->dlineinfo($i); + } + +# Calculate the vertical position of the next display line +my $Yoffset = 0; +$Yoffset = $by - $ly + 1 if ($n== -1); +$Yoffset = $ly + $lh + 1 - $by if ($n == 1); +$Yoffset*=$n; +$testY = $by + $Yoffset; + +# Save the original 'x' position of the insert cursor if: +# 1. This is the first time through -- or -- +# 2. The insert cursor position has changed from the previous +# time the up or down key was pressed -- or -- +# 3. The cursor has reached the beginning or end of the widget. + +if (not defined $w->{'origx'} or ($w->{'lastindex'} != $i) ) + { + $w->{'origx'} = $bx; + } + +# Try to keep the same column if possible +$testX = $w->{'origx'}; + +# Get the coordinates of the possible new position +my $testindex = $w->index('@'.$testX.','.$testY ); +$w->see($testindex); +my ($nx,$ny,$nw,$nh) = $w->bbox($testindex); + +# Which side of the character should we position the cursor - +# mainly for a proportional font +if ($testX > $nx+$nw/2) + { + $testX = $nx+$nw+1; + } + +my $newindex = $w->index('@'.$testX.','.$testY ); + +if ( $w->compare($newindex,'==','end - 1 char') and ($ny == $ly ) ) + { + # Then we are trying to the 'end' of the text from + # the same display line - don't do that + return $i; + } + +$w->{'lastindex'} = $newindex; +$w->see($newindex); +return $newindex; +} + +# PrevPara -- +# Returns the index of the beginning of the paragraph just before a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# pos - Position at which to start search. +sub PrevPara +{ + my ($w,$pos) = @_; + $pos = $w->index("$pos linestart"); + while (1) + { + if ($w->get("$pos - 1 line") eq "\n" && $w->get($pos) ne "\n" || $pos eq '1.0' ) + { + my $string = $w->get($pos,"$pos lineend"); + if ($string =~ /^(\s)+/) + { + my $off = length($1); + $pos = $w->index("$pos + $off chars") + } + if ($w->compare($pos,'!=','insert') || $pos eq '1.0') + { + return $pos; + } + } + $pos = $w->index("$pos - 1 line") + } +} +# NextPara -- +# Returns the index of the beginning of the paragraph just after a given +# position in the text (the beginning of a paragraph is the first non-blank +# character after a blank line). +# +# Arguments: +# w - The text window in which the cursor is to move. +# start - Position at which to start search. +sub NextPara +{ + my ($w,$start) = @_; + my $pos = $w->index("$start linestart + 1 line"); + while ($w->get($pos) ne "\n") + { + if ($w->compare($pos,'==','end')) + { + return $w->index('end - 1c'); + } + $pos = $w->index("$pos + 1 line") + } + while ($w->get($pos) eq "\n" ) + { + $pos = $w->index("$pos + 1 line"); + if ($w->compare($pos,'==','end')) + { + return $w->index('end - 1c'); + } + } + my $string = $w->get($pos,"$pos lineend"); + if ($string =~ /^(\s+)/) + { + my $off = length($1); + return $w->index("$pos + $off chars"); + } + return $pos; +} +# ScrollPages -- +# This is a utility procedure used in bindings for moving up and down +# pages and possibly extending the selection along the way. It scrolls +# the view in the widget by the number of pages, and it returns the +# index of the character that is at the same position in the new view +# as the insertion cursor used to be in the old view. +# +# Arguments: +# w - The text window in which the cursor is to move. +# count - Number of pages forward to scroll; may be negative +# to scroll backwards. +sub ScrollPages +{ + my ($w,$count) = @_; + my @bbox = $w->bbox('insert'); + $w->yview('scroll',$count,'pages'); + if (!@bbox) + { + return $w->index('@' . int($w->height/2) . ',' . 0); + } + my $x = int($bbox[0]+$bbox[2]/2); + my $y = int($bbox[1]+$bbox[3]/2); + return $w->index('@' . $x . ',' . $y); +} + +sub Contents +{ + my $w = shift; + if (@_) + { + $w->delete('1.0','end'); + $w->insert('end',shift) while (@_); + } + else + { + return $w->get('1.0','end'); + } +} + +sub Destroy +{ + my ($w) = @_; + delete $w->{_Tags_}; +} + +sub Transpose +{ + my ($w) = @_; + my $pos = 'insert'; + $pos = $w->index("$pos + 1 char") if ($w->compare($pos,'!=',"$pos lineend")); + return if ($w->compare("$pos - 1 char",'==','1.0')); + my $new = $w->get("$pos - 1 char").$w->get("$pos - 2 char"); + $w->delete("$pos - 2 char",$pos); + $w->insert('insert',$new); + $w->see('insert'); +} + +sub Tag +{ + my $w = shift; + my $name = shift; + Carp::confess('No args') unless (ref $w and defined $name); + $w->{_Tags_} = {} unless (exists $w->{_Tags_}); + unless (exists $w->{_Tags_}{$name}) + { + require Tk::Text::Tag; + $w->{_Tags_}{$name} = 'Tk::Text::Tag'->new($w,$name); + } + $w->{_Tags_}{$name}->configure(@_) if (@_); + return $w->{_Tags_}{$name}; +} + +sub Tags +{ + my ($w,$name) = @_; + my @result = (); + foreach $name ($w->tagNames(@_)) + { + push(@result,$w->Tag($name)); + } + return @result; +} + +sub TIEHANDLE +{ + my ($class,$obj) = @_; + return $obj; +} + +sub PRINT +{ + my $w = shift; + # Find out whether 'end' is displayed at the moment + # Retrieve the position of the bottom of the window as + # a fraction of the entire contents of the Text widget + my $yview = ($w->yview)[1]; + + # If $yview is 1.0 this means that 'end' is visible in the window + my $update = 0; + $update = 1 if $yview == 1.0; + + # Loop over all input strings + while (@_) + { + $w->insert('end',shift); + } + # Move the window to see the end of the text if required + $w->see('end') if $update; +} + +sub PRINTF +{ + my $w = shift; + $w->PRINT(sprintf(shift,@_)); +} + +sub WhatLineNumberPopUp +{ + my ($w)=@_; + my ($line,$col) = split(/\./,$w->index('insert')); + $w->messageBox(-type => 'Ok', -title => "What Line Number", + -message => "The cursor is on line $line (column is $col)"); +} + +sub MenuLabels +{ + return qw[~File ~Edit ~Search ~View]; +} + +sub SearchMenuItems +{ + my ($w) = @_; + return [ + ['command'=>'~Find', -command => [$w => 'FindPopUp']], + ['command'=>'Find ~Next', -command => [$w => 'FindSelectionNext']], + ['command'=>'Find ~Previous', -command => [$w => 'FindSelectionPrevious']], + ['command'=>'~Replace', -command => [$w => 'FindAndReplacePopUp']] + ]; +} + +sub EditMenuItems +{ + my ($w) = @_; + my @items = (); + foreach my $op ($w->clipEvents) + { + push(@items,['command' => "~$op", -command => [ $w => "clipboard$op"]]); + } + push(@items, + '-', + ['command'=>'Select All', -command => [$w => 'selectAll']], + ['command'=>'Unselect All', -command => [$w => 'unselectAll']], + ); + return \@items; +} + +sub ViewMenuItems +{ + my ($w) = @_; + my $v; + tie $v,'Tk::Configure',$w,'-wrap'; + return [ + ['command'=>'Goto ~Line...', -command => [$w => 'GotoLineNumberPopUp']], + ['command'=>'~Which Line?', -command => [$w => 'WhatLineNumberPopUp']], + ['cascade'=> 'Wrap', -tearoff => 0, -menuitems => [ + [radiobutton => 'Word', -variable => \$v, -value => 'word'], + [radiobutton => 'Character', -variable => \$v, -value => 'char'], + [radiobutton => 'None', -variable => \$v, -value => 'none'], + ]], + ]; +} + +######################################################################## +sub clipboardColumnCopy +{ + my ($w) = @_; + $w->Column_Copy_or_Cut(0); +} + +sub clipboardColumnCut +{ + my ($w) = @_; + $w->Column_Copy_or_Cut(1); +} + +######################################################################## +sub Column_Copy_or_Cut +{ + my ($w, $cut) = @_; + my @ranges = $w->tagRanges('sel'); + my $range_total = @ranges; + # this only makes sense if there is one selected block + unless ($range_total==2) + { + $w->bell; + return; + } + + my $selection_start_index = shift(@ranges); + my $selection_end_index = shift(@ranges); + + my ($start_line, $start_column) = split(/\./, $selection_start_index); + my ($end_line, $end_column) = split(/\./, $selection_end_index); + + # correct indices for tabs + my $string; + $string = $w->get($start_line.'.0', $start_line.'.0 lineend'); + $string = substr($string, 0, $start_column); + $string = expand($string); + my $tab_start_column = length($string); + + $string = $w->get($end_line.'.0', $end_line.'.0 lineend'); + $string = substr($string, 0, $end_column); + $string = expand($string); + my $tab_end_column = length($string); + + my $length = $tab_end_column - $tab_start_column; + + $selection_start_index = $start_line . '.' . $tab_start_column; + $selection_end_index = $end_line . '.' . $tab_end_column; + + # clear the clipboard + $w->clipboardClear; + my ($clipstring, $startstring, $endstring); + my $padded_string = ' 'x$tab_end_column; + for(my $line = $start_line; $line <= $end_line; $line++) + { + $string = $w->get($line.'.0', $line.'.0 lineend'); + $string = expand($string) . $padded_string; + $clipstring = substr($string, $tab_start_column, $length); + #$clipstring = unexpand($clipstring); + $w->clipboardAppend($clipstring."\n"); + + if ($cut) + { + $startstring = substr($string, 0, $tab_start_column); + $startstring = unexpand($startstring); + $start_column = length($startstring); + + $endstring = substr($string, 0, $tab_end_column ); + $endstring = unexpand($endstring); + $end_column = length($endstring); + + $w->delete($line.'.'.$start_column, $line.'.'.$end_column); + } + } +} + +######################################################################## + +sub clipboardColumnPaste +{ + my ($w) = @_; + my @ranges = $w->tagRanges('sel'); + my $range_total = @ranges; + if ($range_total) + { + warn " there cannot be any selections during clipboardColumnPaste. \n"; + $w->bell; + return; + } + + my $clipboard_text; + eval + { + $clipboard_text = $w->SelectionGet(-selection => "CLIPBOARD"); + }; + + return unless (defined($clipboard_text)); + return unless (length($clipboard_text)); + my $string; + + my $current_index = $w->index('insert'); + my ($current_line, $current_column) = split(/\./,$current_index); + $string = $w->get($current_line.'.0', $current_line.'.'.$current_column); + $string = expand($string); + $current_column = length($string); + + my @clipboard_lines = split(/\n/,$clipboard_text); + my $length; + my $end_index; + my ($delete_start_column, $delete_end_column, $insert_column_index); + foreach my $line (@clipboard_lines) + { + if ($w->OverstrikeMode) + { + #figure out start and end indexes to delete, compensating for tabs. + $string = $w->get($current_line.'.0', $current_line.'.0 lineend'); + $string = expand($string); + $string = substr($string, 0, $current_column); + $string = unexpand($string); + $delete_start_column = length($string); + + $string = $w->get($current_line.'.0', $current_line.'.0 lineend'); + $string = expand($string); + $string = substr($string, 0, $current_column + length($line)); + chomp($string); # dont delete a "\n" on end of line. + $string = unexpand($string); + $delete_end_column = length($string); + + + + $w->delete( + $current_line.'.'.$delete_start_column , + $current_line.'.'.$delete_end_column + ); + } + + $string = $w->get($current_line.'.0', $current_line.'.0 lineend'); + $string = expand($string); + $string = substr($string, 0, $current_column); + $string = unexpand($string); + $insert_column_index = length($string); + + $w->insert($current_line.'.'.$insert_column_index, unexpand($line)); + $current_line++; + } + +} + +# Backward compatibility +sub GetMenu +{ + carp((caller(0))[3]." is deprecated") if $^W; + shift->menu +} + +1; +__END__ + + diff --git a/Master/tlpkg/installer/perllib/Tk/Trace.pm b/Master/tlpkg/installer/perllib/Tk/Trace.pm new file mode 100644 index 00000000000..1e38e79a065 --- /dev/null +++ b/Master/tlpkg/installer/perllib/Tk/Trace.pm @@ -0,0 +1,405 @@ +package Tk::Trace; + +use vars qw($VERSION); +$VERSION = sprintf '4.%03d', q$Revision: #7 $ =~ /\D(\d+)\s*$/; + +use Carp; +use Tie::Watch; +use strict; + +# The %TRACE hash is indexed by stringified variable reference. Each hash +# bucket contains an array reference having two elements: +# +# ->[0] = a reference to the variable's Tie::Watch object +# ->[1] = a hash reference with these keys: -fetch, -store, -destroy +# ->{key} = [ active flag, [ callback list ] ] +# where each callback is a normalized callback array reference +# +# Thus, each trace type (r w u ) may have multiple traces. + +my %TRACE; # watchpoints indexed by stringified ref + +my %OP = ( # trace to Tie::Watch operation map + r => '-fetch', + w => '-store', + u => '-destroy', +); + +sub fetch { + + # fetch() wraps the user's callback with necessary tie() bookkeeping + # and invokes the callback with the proper arguments. It expects: + # + # $_[0] = Tie::Watch object + # $_[1] = undef for a scalar, an index/key for an array/hash + # + # The user's callback is passed these arguments: + # + # $_[0] = undef for a scalar, index/key for array/hash + # $_[1] = current value + # $_[2] = operation 'r' + # $_[3 .. $#_] = optional user callback arguments + # + # The user callback returns the final value to assign the variable. + + my $self = shift; # Tie::Watch object + my $val = $self->Fetch(@_); # get variable's current value + my $aref = $self->Args('-fetch'); # argument reference + my $call = $TRACE{$aref->[0]}->[1]->{-fetch}; # active flag/callbacks + return $val unless $call->[0]; # if fetch inactive + + my $final_val; + foreach my $aref (reverse @$call[ 1 .. $#{@$call} ] ) { + my ( @args_copy ) = @$aref; + my $sub = shift @args_copy; # user's callback + unshift @_, undef if scalar @_ == 0; # undef "index" for a scalar + my @args = @_; # save for post-callback work + $args[1] = &$sub(@_, $val, 'r', @args_copy); # invoke user callback + shift @args unless defined $args[0]; # drop scalar "index" + $final_val = $self->Store(@args); # update variable's value + } + $final_val; + +} # end fetch + +sub store { + + # store() wraps the user's callback with necessary tie() bookkeeping + # and invokes the callback with the proper arguments. It expects: + # + # $_[0] = Tie::Watch object + # $_[1] = new value for a scalar, index/key for an array/hash + # $_[2] = undef for a scalar, new value for an array/hash + # + # The user's callback is passed these arguments: + # + # $_[0] = undef for a scalar, index/key for array/hash + # $_[1] = new value + # $_[2] = operation 'w' + # $_[3 .. $#_] = optional user callback arguments + # + # The user callback returns the final value to assign the variable. + + my $self = shift; # Tie::Watch object + my $val = $self->Store(@_); # store variable's new value + my $aref = $self->Args('-store'); # argument reference + my $call = $TRACE{$aref->[0]}->[1]->{-store}; # active flag/callbacks + return $val unless $call->[0]; # if store inactive + + foreach my $aref ( reverse @$call[ 1 .. $#{@$call} ] ) { + my ( @args_copy ) = @$aref; + my $sub = shift @args_copy; # user's callback + unshift @_, undef if scalar @_ == 1; # undef "index" for a scalar + my @args = @_; # save for post-callback work + $args[1] = &$sub(@_, 'w', @args_copy); # invoke user callback + shift @args unless defined $args[0]; # drop scalar "index" + $self->Store(@args); # update variable's value + } + +} # end store + +sub destroy { + + # destroy() wraps the user's callback with necessary tie() bookkeeping + # and invokes the callback with the proper arguments. It expects: + # + # $_[0] = Tie::Watch object + # + # The user's callback is passed these arguments: + # + # $_[0] = undef for a scalar, index/key for array/hash + # $_[1] = final value + # $_[2] = operation 'u' + # $_[3 .. $#_] = optional user callback arguments + + my $self = shift; # Tie::Watch object + my $val = $self->Fetch(@_); # variable's final value + my $aref = $self->Args('-destroy'); # argument reference + my $call = $TRACE{$aref->[0]}->[1]->{-destroy}; # active flag/callbacks + return $val unless $call->[0]; # if destroy inactive + + foreach my $aref ( reverse @$call[ 1 .. $#{@$call} ] ) { + my ( @args_copy ) = @$aref; + my $sub = shift @args_copy; # user's callback + my $val = $self->Fetch(@_); # get final value + &$sub(undef, $val, 'u', @args_copy); # invoke user callback + $self->Destroy(@_); # destroy variable + } + +} # end destroy + +sub Tk::Widget::traceVariable { + + my( $parent, $vref, $op, $callback ) = @_; + + { + $^W = 0; + croak "Illegal parent '$parent', not a widget" unless ref $parent; + croak "Illegal variable '$vref', not a reference" unless ref $vref; + croak "Illegal trace operation '$op'" unless $op; + croak "Illegal trace operation '$op'" if $op =~ /[^rwu]/; + croak "Illegal callback ($callback)" unless $callback; + } + + # Need to add our internal callback to user's callback arg list + # so we can call ours first, followed by the user's callback and + # any user arguments. Trace callbacks are activated as requied. + + my $trace = $TRACE{$vref}; + if ( not defined $trace ) { + my $watch = Tie::Watch->new( + -variable => $vref, + -fetch => [ \&fetch, $vref ], + -store => [ \&store, $vref ], + -destroy => [ \&destroy, $vref ], + ); + $trace = $TRACE{$vref} = + [$watch, + { + -fetch => [ 0 ], + -store => [ 0 ], + -destroy => [ 0 ], + } + ]; + } + + $callback = [ $callback ] if ref $callback eq 'CODE'; + + foreach my $o (split '', $op) { + push @{$trace->[1]->{$OP{$o}}}, $callback; + $trace->[1]->{$OP{$o}}->[0] = 1; # activate + } + + return $trace; # for peeking + +} # end traceVariable + +sub Tk::Widget::traceVdelete { + + my ( $parent, $vref, $op_not_honored, $callabck_not_honored ) = @_; + + if ( defined $TRACE{$vref}->[0] ) { + $$vref = $TRACE{$vref}->[0]->Fetch; + $TRACE{$vref}->[0]->Unwatch; + delete $TRACE{$vref}; + } + +} # end traceVdelete + +sub Tk::Widget::traceVinfo { + + my ( $parent, $vref ) = @_; + + return ( defined $TRACE{$vref}->[0] ) ? $TRACE{$vref}->[0]->Info : undef; + +} # end traceVinfo + +=head1 NAME + +Tk::Trace - emulate Tcl/Tk B<trace> functions. + +=head1 SYNOPSIS + + use Tk::Trace + + $mw->traceVariable(\$v, 'wru' => [\&update_meter, $scale]); + %vinfo = $mw->traceVinfo(\$v); + print "Trace info :\n ", join("\n ", @{$vinfo{-legible}}), "\n"; + $mw->traceVdelete(\$v); + +=head1 DESCRIPTION + +This class module emulates the Tcl/Tk B<trace> family of commands by +binding subroutines of your devising to Perl variables using simple +B<Tie::Watch> features. + +Callback format is patterned after the Perl/Tk scheme: supply either a +code reference, or, supply an array reference and pass the callback +code reference in the first element of the array, followed by callback +arguments. + +User callbacks are passed these arguments: + + $_[0] = undef for a scalar, index/key for array/hash + $_[1] = variable's current (read), new (write), final (undef) value + $_[2] = operation (r, w, or u) + $_[3 .. $#_] = optional user callback arguments + +As a Trace user, you have an important responsibility when writing your +callback, since you control the final value assigned to the variable. +A typical callback might look like: + + sub callback { + my($index, $value, $op, @args) = @_; + return if $op eq 'u'; + # .... code which uses $value ... + return $value; # variable's final value + } + +Note that the callback's return value becomes the variable's final value, +for either read or write traces. + +For write operations, the variable is updated with its new value before +the callback is invoked. + +Multiple read, write and undef callbacks can be attached to a variable, +which are invoked in reverse order of creation. + +=head1 METHODS + +=over 4 + +=item $mw->traceVariable(varRef, op => callback); + +B<varRef> is a reference to the scalar, array or hash variable you +wish to trace. B<op> is the trace operation, and can be any combination +of B<r> for read, B<w> for write, and B<u> for undef. B<callback> is a +standard Perl/Tk callback, and is invoked, depending upon the value of +B<op>, whenever the variable is read, written, or destroyed. + +=item %vinfo = $mw->traceVinfo(varRef); + +Returns a hash detailing the internals of the Trace object, with these +keys: + + %vinfo = ( + -variable => varRef + -debug => '0' + -shadow => '1' + -value => 'HELLO SCALAR' + -destroy => callback + -fetch => callback + -store => callback + -legible => above data formatted as a list of string, for printing + ); + +For array and hash Trace objects, the B<-value> key is replaced with a +B<-ptr> key which is a reference to the parallel array or hash. +Additionally, for an array or hash, there are key/value pairs for +all the variable specific callbacks. + +=item $mw->traceVdelete(\$v); + +Stop tracing the variable. + +=back + +=head1 EXAMPLES + + # Trace a Scale's variable and move a meter in unison. + + use Tk; + use Tk::widgets qw/Trace/; + + $pi = 3.1415926; + $mw = MainWindow->new; + $c = $mw->Canvas( qw/-width 200 -height 110 -bd 2 -relief sunken/ )->grid; + $c->createLine( qw/100 100 10 100 -tag meter -arrow last -width 5/ ); + $s = $mw->Scale( qw/-orient h -from 0 -to 100 -variable/ => \$v )->grid; + $mw->Label( -text => 'Slide Me for 5 Seconds' )->grid; + + $mw->traceVariable( \$v, 'w' => [ \&update_meter, $s ] ); + + $mw->after( 5000 => sub { + print "Untrace time ...\n"; + %vinfo = $s->traceVinfo( \$v ); + print "Watch info :\n ", join("\n ", @{$vinfo{-legible}}), "\n"; + $c->traceVdelete( \$v ); + }); + + MainLoop; + + sub update_meter { + my( $index, $value, $op, @args ) = @_; + return if $op eq 'u'; + $min = $s->cget( -from ); + $max = $s->cget( -to ); + $pos = $value / abs( $max - $min ); + $x = 100.0 - 90.0 * ( cos( $pos * $pi ) ); + $y = 100.0 - 90.0 * ( sin( $pos * $pi ) ); + $c->coords( qw/meter 100 100/, $x, $y ); + return $value; + } + + # Predictive text entry. + + use Tk; + use Tk::widgets qw/ LabEntry Trace /; + use strict; + + my @words = qw/radio television telephone turntable microphone/; + + my $mw = MainWindow->new; + + my $e = $mw->LabEntry( + qw/ -label Thing -width 40 /, + -labelPack => [ qw/ -side left / ], + -textvariable => \my $thing, + ); + my $t = $mw->Text( qw/ -height 10 -width 50 / );; + + $t->pack( $e, qw/ -side top / ); + + $e->focus; + $e->traceVariable( \$thing, 'w', [ \&trace_thing, $e, $t ] ); + + foreach my $k ( 1 .. 12 ) { + $e->bind( "<F${k}>" => [ \&ins, $t, Ev('K') ] ); + } + $e->bind( '<Return>' => + sub { + print "$thing\n"; + $_[0]->delete( 0, 'end' ); + } + ); + + MainLoop; + + sub trace_thing { + + my( $index, $value, $op, $e, $t ) = @_; + + return unless $value; + + $t->delete( qw/ 1.0 end / ); + foreach my $w ( @words ) { + if ( $w =~ /^$value/ ) { + $t->insert( 'end', "$w\n" ); + } + } + + return $value; + + } # end trace_thing + + sub ins { + + my( $e, $t, $K ) = @_; + + my( $index ) = $K =~ /^F(\d+)$/; + + $e->delete( 0, 'end' ); + $e->insert( 'end', $t->get( "$index.0", "$index.0 lineend" ) ); + $t->delete( qw/ 1.0 end / ); + + } # end ins + +=head1 HISTORY + + Stephen.O.Lidie@Lehigh.EDU, Lehigh University Computing Center, 2000/08/01 + . Version 1.0, for Tk800.022. + + sol0@Lehigh.EDU, Lehigh University Computing Center, 2003/09/22 + . Version 1.1, for Tk804.025, add support for multiple traces of the same + type on the same variable. + +=head1 COPYRIGHT + +Copyright (C) 2000 - 2003 Stephen O. Lidie. All rights reserved. + +This program is free software; you can redistribute it and/or modify it under +the same terms as Perl itself. + +=cut + +1; diff --git a/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.bs b/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.bs diff --git a/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.dll b/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.dll Binary files differnew file mode 100755 index 00000000000..d053a295a71 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Fcntl/Fcntl.dll diff --git a/Master/tlpkg/installer/perllib/auto/List/Util/Util.bs b/Master/tlpkg/installer/perllib/auto/List/Util/Util.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/List/Util/Util.bs diff --git a/Master/tlpkg/installer/perllib/auto/List/Util/Util.dll b/Master/tlpkg/installer/perllib/auto/List/Util/Util.dll Binary files differnew file mode 100755 index 00000000000..238b1648bea --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/List/Util/Util.dll diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.bs b/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.bs diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.dll b/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.dll Binary files differnew file mode 100755 index 00000000000..49bdaee0917 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/POSIX.dll diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/abs.al b/Master/tlpkg/installer/perllib/auto/POSIX/abs.al new file mode 100644 index 00000000000..89999433d53 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/abs.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 398 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\abs.al)" +sub abs { + usage "abs(x)" if @_ != 1; + CORE::abs($_[0]); +} + +# end of POSIX::abs +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/alarm.al b/Master/tlpkg/installer/perllib/auto/POSIX/alarm.al new file mode 100644 index 00000000000..e1c864ed8e0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/alarm.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 615 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\alarm.al)" +sub alarm { + usage "alarm(seconds)" if @_ != 1; + CORE::alarm($_[0]); +} + +# end of POSIX::alarm +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/assert.al b/Master/tlpkg/installer/perllib/auto/POSIX/assert.al new file mode 100644 index 00000000000..b3bce100406 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/assert.al @@ -0,0 +1,15 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 80 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\assert.al)" +sub assert { + usage "assert(expr)" if @_ != 1; + if (!$_[0]) { + croak "Assertion failed"; + } +} + +# end of POSIX::assert +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/atan2.al b/Master/tlpkg/installer/perllib/auto/POSIX/atan2.al new file mode 100644 index 00000000000..9482e3cff23 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/atan2.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 145 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atan2.al)" +sub atan2 { + usage "atan2(x,y)" if @_ != 2; + CORE::atan2($_[0], $_[1]); +} + +# end of POSIX::atan2 +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/atexit.al b/Master/tlpkg/installer/perllib/auto/POSIX/atexit.al new file mode 100644 index 00000000000..b0fdf7e97cf --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/atexit.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 403 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atexit.al)" +sub atexit { + unimpl "atexit() is C-specific: use END {} instead"; +} + +# end of POSIX::atexit +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/atof.al b/Master/tlpkg/installer/perllib/auto/POSIX/atof.al new file mode 100644 index 00000000000..fc1d1cef431 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/atof.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 407 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atof.al)" +sub atof { + unimpl "atof() is C-specific, stopped"; +} + +# end of POSIX::atof +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/atoi.al b/Master/tlpkg/installer/perllib/auto/POSIX/atoi.al new file mode 100644 index 00000000000..5eef246231b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/atoi.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 411 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atoi.al)" +sub atoi { + unimpl "atoi() is C-specific, stopped"; +} + +# end of POSIX::atoi +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/atol.al b/Master/tlpkg/installer/perllib/auto/POSIX/atol.al new file mode 100644 index 00000000000..e6fc6869a1a --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/atol.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 415 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\atol.al)" +sub atol { + unimpl "atol() is C-specific, stopped"; +} + +# end of POSIX::atol +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/autosplit.ix b/Master/tlpkg/installer/perllib/auto/POSIX/autosplit.ix new file mode 100644 index 00000000000..8ecf455bb80 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/autosplit.ix @@ -0,0 +1,159 @@ +# Index created by AutoSplit for ..\..\lib\POSIX.pm +# (file acts as timestamp) +package POSIX; +sub usage ; +sub redef ; +sub unimpl ; +sub assert ; +sub tolower ; +sub toupper ; +sub closedir ; +sub opendir ; +sub readdir ; +sub rewinddir ; +sub errno ; +sub creat ; +sub fcntl ; +sub getgrgid ; +sub getgrnam ; +sub atan2 ; +sub cos ; +sub exp ; +sub fabs ; +sub log ; +sub pow ; +sub sin ; +sub sqrt ; +sub getpwnam ; +sub getpwuid ; +sub longjmp ; +sub setjmp ; +sub siglongjmp ; +sub sigsetjmp ; +sub kill ; +sub raise ; +sub offsetof ; +sub clearerr ; +sub fclose ; +sub fdopen ; +sub feof ; +sub fgetc ; +sub fgets ; +sub fileno ; +sub fopen ; +sub fprintf ; +sub fputc ; +sub fputs ; +sub fread ; +sub freopen ; +sub fscanf ; +sub fseek ; +sub fsync ; +sub ferror ; +sub fflush ; +sub fgetpos ; +sub fsetpos ; +sub ftell ; +sub fwrite ; +sub getc ; +sub getchar ; +sub gets ; +sub perror ; +sub printf ; +sub putc ; +sub putchar ; +sub puts ; +sub remove ; +sub rename ; +sub rewind ; +sub scanf ; +sub sprintf ; +sub sscanf ; +sub tmpfile ; +sub ungetc ; +sub vfprintf ; +sub vprintf ; +sub vsprintf ; +sub abs ; +sub atexit ; +sub atof ; +sub atoi ; +sub atol ; +sub bsearch ; +sub calloc ; +sub div ; +sub exit ; +sub free ; +sub getenv ; +sub labs ; +sub ldiv ; +sub malloc ; +sub qsort ; +sub rand ; +sub realloc ; +sub srand ; +sub system ; +sub memchr ; +sub memcmp ; +sub memcpy ; +sub memmove ; +sub memset ; +sub strcat ; +sub strchr ; +sub strcmp ; +sub strcpy ; +sub strcspn ; +sub strerror ; +sub strlen ; +sub strncat ; +sub strncmp ; +sub strncpy ; +sub strpbrk ; +sub strrchr ; +sub strspn ; +sub strstr ; +sub strtok ; +sub chmod ; +sub fstat ; +sub mkdir ; +sub stat ; +sub umask ; +sub wait ; +sub waitpid ; +sub gmtime ; +sub localtime ; +sub time ; +sub alarm ; +sub chdir ; +sub chown ; +sub execl ; +sub execle ; +sub execlp ; +sub execv ; +sub execve ; +sub execvp ; +sub fork ; +sub getegid ; +sub geteuid ; +sub getgid ; +sub getgroups ; +sub getlogin ; +sub getpgrp ; +sub getpid ; +sub getppid ; +sub getuid ; +sub isatty ; +sub link ; +sub rmdir ; +sub setbuf ; +sub setvbuf ; +sub sleep ; +sub unlink ; +sub utime ; +sub load_imports ; +package POSIX::SigAction; +sub handler ; +sub mask ; +sub flags ; +sub safe ; +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/bsearch.al b/Master/tlpkg/installer/perllib/auto/POSIX/bsearch.al new file mode 100644 index 00000000000..4acc59b5a7d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/bsearch.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 419 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\bsearch.al)" +sub bsearch { + unimpl "bsearch() not supplied"; +} + +# end of POSIX::bsearch +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/calloc.al b/Master/tlpkg/installer/perllib/auto/POSIX/calloc.al new file mode 100644 index 00000000000..776029eff29 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/calloc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 423 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\calloc.al)" +sub calloc { + unimpl "calloc() is C-specific, stopped"; +} + +# end of POSIX::calloc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/chdir.al b/Master/tlpkg/installer/perllib/auto/POSIX/chdir.al new file mode 100644 index 00000000000..1bddab213d6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/chdir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 620 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chdir.al)" +sub chdir { + usage "chdir(directory)" if @_ != 1; + CORE::chdir($_[0]); +} + +# end of POSIX::chdir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/chmod.al b/Master/tlpkg/installer/perllib/auto/POSIX/chmod.al new file mode 100644 index 00000000000..8fc0d5a5e0b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/chmod.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 561 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chmod.al)" +sub chmod { + usage "chmod(mode, filename)" if @_ != 2; + CORE::chmod($_[0], $_[1]); +} + +# end of POSIX::chmod +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/chown.al b/Master/tlpkg/installer/perllib/auto/POSIX/chown.al new file mode 100644 index 00000000000..ca945bd855d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/chown.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 625 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\chown.al)" +sub chown { + usage "chown(uid, gid, filename)" if @_ != 3; + CORE::chown($_[0], $_[1], $_[2]); +} + +# end of POSIX::chown +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/clearerr.al b/Master/tlpkg/installer/perllib/auto/POSIX/clearerr.al new file mode 100644 index 00000000000..c360043abf9 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/clearerr.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 225 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\clearerr.al)" +sub clearerr { + redef "IO::Handle::clearerr()"; +} + +# end of POSIX::clearerr +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/closedir.al b/Master/tlpkg/installer/perllib/auto/POSIX/closedir.al new file mode 100644 index 00000000000..16ae1cd4f76 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/closedir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 97 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\closedir.al)" +sub closedir { + usage "closedir(dirhandle)" if @_ != 1; + CORE::closedir($_[0]); +} + +# end of POSIX::closedir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/cos.al b/Master/tlpkg/installer/perllib/auto/POSIX/cos.al new file mode 100644 index 00000000000..ee01c091b27 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/cos.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 150 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\cos.al)" +sub cos { + usage "cos(x)" if @_ != 1; + CORE::cos($_[0]); +} + +# end of POSIX::cos +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/creat.al b/Master/tlpkg/installer/perllib/auto/POSIX/creat.al new file mode 100644 index 00000000000..2d1cfb7d55d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/creat.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 125 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\creat.al)" +sub creat { + usage "creat(filename, mode)" if @_ != 2; + &open($_[0], &O_WRONLY | &O_CREAT | &O_TRUNC, $_[1]); +} + +# end of POSIX::creat +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/div.al b/Master/tlpkg/installer/perllib/auto/POSIX/div.al new file mode 100644 index 00000000000..4c751314da0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/div.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 427 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\div.al)" +sub div { + unimpl "div() is C-specific, use /, % and int instead"; +} + +# end of POSIX::div +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/errno.al b/Master/tlpkg/installer/perllib/auto/POSIX/errno.al new file mode 100644 index 00000000000..c57abdc4c3b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/errno.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 120 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\errno.al)" +sub errno { + usage "errno()" if @_ != 0; + $! + 0; +} + +# end of POSIX::errno +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execl.al b/Master/tlpkg/installer/perllib/auto/POSIX/execl.al new file mode 100644 index 00000000000..3ffc4f5a671 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execl.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 630 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execl.al)" +sub execl { + unimpl "execl() is C-specific, stopped"; +} + +# end of POSIX::execl +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execle.al b/Master/tlpkg/installer/perllib/auto/POSIX/execle.al new file mode 100644 index 00000000000..ec7e12da909 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execle.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 634 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execle.al)" +sub execle { + unimpl "execle() is C-specific, stopped"; +} + +# end of POSIX::execle +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execlp.al b/Master/tlpkg/installer/perllib/auto/POSIX/execlp.al new file mode 100644 index 00000000000..a9e32524839 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execlp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 638 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execlp.al)" +sub execlp { + unimpl "execlp() is C-specific, stopped"; +} + +# end of POSIX::execlp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execv.al b/Master/tlpkg/installer/perllib/auto/POSIX/execv.al new file mode 100644 index 00000000000..1e6f20bba77 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execv.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 642 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execv.al)" +sub execv { + unimpl "execv() is C-specific, stopped"; +} + +# end of POSIX::execv +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execve.al b/Master/tlpkg/installer/perllib/auto/POSIX/execve.al new file mode 100644 index 00000000000..ae23c53ea77 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execve.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 646 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execve.al)" +sub execve { + unimpl "execve() is C-specific, stopped"; +} + +# end of POSIX::execve +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/execvp.al b/Master/tlpkg/installer/perllib/auto/POSIX/execvp.al new file mode 100644 index 00000000000..88d5dd6764e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/execvp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 650 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\execvp.al)" +sub execvp { + unimpl "execvp() is C-specific, stopped"; +} + +# end of POSIX::execvp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/exit.al b/Master/tlpkg/installer/perllib/auto/POSIX/exit.al new file mode 100644 index 00000000000..d7806b3f4db --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/exit.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 431 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exit.al)" +sub exit { + usage "exit(status)" if @_ != 1; + CORE::exit($_[0]); +} + +# end of POSIX::exit +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/exp.al b/Master/tlpkg/installer/perllib/auto/POSIX/exp.al new file mode 100644 index 00000000000..251dc740eaf --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/exp.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 155 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\exp.al)" +sub exp { + usage "exp(x)" if @_ != 1; + CORE::exp($_[0]); +} + +# end of POSIX::exp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fabs.al b/Master/tlpkg/installer/perllib/auto/POSIX/fabs.al new file mode 100644 index 00000000000..ebe714729c2 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fabs.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 160 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fabs.al)" +sub fabs { + usage "fabs(x)" if @_ != 1; + CORE::abs($_[0]); +} + +# end of POSIX::fabs +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fclose.al b/Master/tlpkg/installer/perllib/auto/POSIX/fclose.al new file mode 100644 index 00000000000..f662ef7cda6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fclose.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 229 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fclose.al)" +sub fclose { + redef "IO::Handle::close()"; +} + +# end of POSIX::fclose +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fcntl.al b/Master/tlpkg/installer/perllib/auto/POSIX/fcntl.al new file mode 100644 index 00000000000..bf6ec04fb4c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fcntl.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 130 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fcntl.al)" +sub fcntl { + usage "fcntl(filehandle, cmd, arg)" if @_ != 3; + CORE::fcntl($_[0], $_[1], $_[2]); +} + +# end of POSIX::fcntl +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fdopen.al b/Master/tlpkg/installer/perllib/auto/POSIX/fdopen.al new file mode 100644 index 00000000000..392f8e27fbf --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fdopen.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 233 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fdopen.al)" +sub fdopen { + redef "IO::Handle::new_from_fd()"; +} + +# end of POSIX::fdopen +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/feof.al b/Master/tlpkg/installer/perllib/auto/POSIX/feof.al new file mode 100644 index 00000000000..4c8b5ea37af --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/feof.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 237 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\feof.al)" +sub feof { + redef "IO::Handle::eof()"; +} + +# end of POSIX::feof +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/ferror.al b/Master/tlpkg/installer/perllib/auto/POSIX/ferror.al new file mode 100644 index 00000000000..6ec8cccb11b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/ferror.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 289 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ferror.al)" +sub ferror { + redef "IO::Handle::error()"; +} + +# end of POSIX::ferror +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fflush.al b/Master/tlpkg/installer/perllib/auto/POSIX/fflush.al new file mode 100644 index 00000000000..0ba6d1416f0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fflush.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 293 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fflush.al)" +sub fflush { + redef "IO::Handle::flush()"; +} + +# end of POSIX::fflush +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fgetc.al b/Master/tlpkg/installer/perllib/auto/POSIX/fgetc.al new file mode 100644 index 00000000000..f89a6f86334 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fgetc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 241 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetc.al)" +sub fgetc { + redef "IO::Handle::getc()"; +} + +# end of POSIX::fgetc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fgetpos.al b/Master/tlpkg/installer/perllib/auto/POSIX/fgetpos.al new file mode 100644 index 00000000000..7583bbf3da6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fgetpos.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 297 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgetpos.al)" +sub fgetpos { + redef "IO::Seekable::getpos()"; +} + +# end of POSIX::fgetpos +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fgets.al b/Master/tlpkg/installer/perllib/auto/POSIX/fgets.al new file mode 100644 index 00000000000..7edcffdd192 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fgets.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 245 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fgets.al)" +sub fgets { + redef "IO::Handle::gets()"; +} + +# end of POSIX::fgets +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fileno.al b/Master/tlpkg/installer/perllib/auto/POSIX/fileno.al new file mode 100644 index 00000000000..45f0908329c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fileno.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 249 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fileno.al)" +sub fileno { + redef "IO::Handle::fileno()"; +} + +# end of POSIX::fileno +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fopen.al b/Master/tlpkg/installer/perllib/auto/POSIX/fopen.al new file mode 100644 index 00000000000..795f272b2bb --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fopen.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 253 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fopen.al)" +sub fopen { + redef "IO::File::open()"; +} + +# end of POSIX::fopen +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fork.al b/Master/tlpkg/installer/perllib/auto/POSIX/fork.al new file mode 100644 index 00000000000..cb0ee7aaf13 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fork.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 654 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fork.al)" +sub fork { + usage "fork()" if @_ != 0; + CORE::fork; +} + +# end of POSIX::fork +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fprintf.al b/Master/tlpkg/installer/perllib/auto/POSIX/fprintf.al new file mode 100644 index 00000000000..6ac5cb6a065 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fprintf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 257 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fprintf.al)" +sub fprintf { + unimpl "fprintf() is C-specific--use printf instead"; +} + +# end of POSIX::fprintf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fputc.al b/Master/tlpkg/installer/perllib/auto/POSIX/fputc.al new file mode 100644 index 00000000000..71a3b2307bb --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fputc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 261 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputc.al)" +sub fputc { + unimpl "fputc() is C-specific--use print instead"; +} + +# end of POSIX::fputc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fputs.al b/Master/tlpkg/installer/perllib/auto/POSIX/fputs.al new file mode 100644 index 00000000000..5cc9cdc175b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fputs.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 265 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fputs.al)" +sub fputs { + unimpl "fputs() is C-specific--use print instead"; +} + +# end of POSIX::fputs +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fread.al b/Master/tlpkg/installer/perllib/auto/POSIX/fread.al new file mode 100644 index 00000000000..a2f731a784c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fread.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 269 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fread.al)" +sub fread { + unimpl "fread() is C-specific--use read instead"; +} + +# end of POSIX::fread +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/free.al b/Master/tlpkg/installer/perllib/auto/POSIX/free.al new file mode 100644 index 00000000000..71eff3059c3 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/free.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 436 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\free.al)" +sub free { + unimpl "free() is C-specific, stopped"; +} + +# end of POSIX::free +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/freopen.al b/Master/tlpkg/installer/perllib/auto/POSIX/freopen.al new file mode 100644 index 00000000000..31e08a2a889 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/freopen.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 273 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\freopen.al)" +sub freopen { + unimpl "freopen() is C-specific--use open instead"; +} + +# end of POSIX::freopen +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fscanf.al b/Master/tlpkg/installer/perllib/auto/POSIX/fscanf.al new file mode 100644 index 00000000000..c5a5e08217b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fscanf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 277 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fscanf.al)" +sub fscanf { + unimpl "fscanf() is C-specific--use <> and regular expressions instead"; +} + +# end of POSIX::fscanf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fseek.al b/Master/tlpkg/installer/perllib/auto/POSIX/fseek.al new file mode 100644 index 00000000000..0a591cca259 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fseek.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 281 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fseek.al)" +sub fseek { + redef "IO::Seekable::seek()"; +} + +# end of POSIX::fseek +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fsetpos.al b/Master/tlpkg/installer/perllib/auto/POSIX/fsetpos.al new file mode 100644 index 00000000000..311027b54ea --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fsetpos.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 301 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fsetpos.al)" +sub fsetpos { + redef "IO::Seekable::setpos()"; +} + +# end of POSIX::fsetpos +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fstat.al b/Master/tlpkg/installer/perllib/auto/POSIX/fstat.al new file mode 100644 index 00000000000..084979716d0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fstat.al @@ -0,0 +1,17 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 566 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fstat.al)" +sub fstat { + usage "fstat(fd)" if @_ != 1; + local *TMP; + CORE::open(TMP, "<&$_[0]"); # Gross. + my @l = CORE::stat(TMP); + CORE::close(TMP); + @l; +} + +# end of POSIX::fstat +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fsync.al b/Master/tlpkg/installer/perllib/auto/POSIX/fsync.al new file mode 100644 index 00000000000..c8038d1d350 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fsync.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 285 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fsync.al)" +sub fsync { + redef "IO::Handle::sync()"; +} + +# end of POSIX::fsync +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/ftell.al b/Master/tlpkg/installer/perllib/auto/POSIX/ftell.al new file mode 100644 index 00000000000..1d3490c6033 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/ftell.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 305 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ftell.al)" +sub ftell { + redef "IO::Seekable::tell()"; +} + +# end of POSIX::ftell +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/fwrite.al b/Master/tlpkg/installer/perllib/auto/POSIX/fwrite.al new file mode 100644 index 00000000000..1099587edbd --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/fwrite.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 309 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\fwrite.al)" +sub fwrite { + unimpl "fwrite() is C-specific--use print instead"; +} + +# end of POSIX::fwrite +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getc.al b/Master/tlpkg/installer/perllib/auto/POSIX/getc.al new file mode 100644 index 00000000000..2ccc28cdf43 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getc.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 313 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getc.al)" +sub getc { + usage "getc(handle)" if @_ != 1; + CORE::getc($_[0]); +} + +# end of POSIX::getc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getchar.al b/Master/tlpkg/installer/perllib/auto/POSIX/getchar.al new file mode 100644 index 00000000000..930386f6827 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getchar.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 318 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getchar.al)" +sub getchar { + usage "getchar()" if @_ != 0; + CORE::getc(STDIN); +} + +# end of POSIX::getchar +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getegid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getegid.al new file mode 100644 index 00000000000..61c0942023f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getegid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 659 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getegid.al)" +sub getegid { + usage "getegid()" if @_ != 0; + $) + 0; +} + +# end of POSIX::getegid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getenv.al b/Master/tlpkg/installer/perllib/auto/POSIX/getenv.al new file mode 100644 index 00000000000..c6fec0ca34b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getenv.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 440 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getenv.al)" +sub getenv { + usage "getenv(name)" if @_ != 1; + $ENV{$_[0]}; +} + +# end of POSIX::getenv +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/geteuid.al b/Master/tlpkg/installer/perllib/auto/POSIX/geteuid.al new file mode 100644 index 00000000000..710491ebcc3 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/geteuid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 664 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\geteuid.al)" +sub geteuid { + usage "geteuid()" if @_ != 0; + $> + 0; +} + +# end of POSIX::geteuid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getgid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getgid.al new file mode 100644 index 00000000000..7cd6164fb43 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getgid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 669 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgid.al)" +sub getgid { + usage "getgid()" if @_ != 0; + $( + 0; +} + +# end of POSIX::getgid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getgrgid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getgrgid.al new file mode 100644 index 00000000000..550e75a69f3 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getgrgid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 135 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrgid.al)" +sub getgrgid { + usage "getgrgid(gid)" if @_ != 1; + CORE::getgrgid($_[0]); +} + +# end of POSIX::getgrgid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getgrnam.al b/Master/tlpkg/installer/perllib/auto/POSIX/getgrnam.al new file mode 100644 index 00000000000..a480731586c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getgrnam.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 140 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgrnam.al)" +sub getgrnam { + usage "getgrnam(name)" if @_ != 1; + CORE::getgrnam($_[0]); +} + +# end of POSIX::getgrnam +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getgroups.al b/Master/tlpkg/installer/perllib/auto/POSIX/getgroups.al new file mode 100644 index 00000000000..5fd0d9d3aea --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getgroups.al @@ -0,0 +1,14 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 674 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getgroups.al)" +sub getgroups { + usage "getgroups()" if @_ != 0; + my %seen; + grep(!$seen{$_}++, split(' ', $) )); +} + +# end of POSIX::getgroups +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getlogin.al b/Master/tlpkg/installer/perllib/auto/POSIX/getlogin.al new file mode 100644 index 00000000000..55bcb4ee9fb --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getlogin.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 680 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getlogin.al)" +sub getlogin { + usage "getlogin()" if @_ != 0; + CORE::getlogin(); +} + +# end of POSIX::getlogin +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getpgrp.al b/Master/tlpkg/installer/perllib/auto/POSIX/getpgrp.al new file mode 100644 index 00000000000..ef0425b7b7f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getpgrp.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 685 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpgrp.al)" +sub getpgrp { + usage "getpgrp()" if @_ != 0; + CORE::getpgrp; +} + +# end of POSIX::getpgrp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getpid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getpid.al new file mode 100644 index 00000000000..9aeaa25b63e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getpid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 690 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpid.al)" +sub getpid { + usage "getpid()" if @_ != 0; + $$; +} + +# end of POSIX::getpid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getppid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getppid.al new file mode 100644 index 00000000000..4951623eb04 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getppid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 695 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getppid.al)" +sub getppid { + usage "getppid()" if @_ != 0; + CORE::getppid; +} + +# end of POSIX::getppid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getpwnam.al b/Master/tlpkg/installer/perllib/auto/POSIX/getpwnam.al new file mode 100644 index 00000000000..296b87f28ef --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getpwnam.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 185 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwnam.al)" +sub getpwnam { + usage "getpwnam(name)" if @_ != 1; + CORE::getpwnam($_[0]); +} + +# end of POSIX::getpwnam +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getpwuid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getpwuid.al new file mode 100644 index 00000000000..5616a6daa2c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getpwuid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 190 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getpwuid.al)" +sub getpwuid { + usage "getpwuid(uid)" if @_ != 1; + CORE::getpwuid($_[0]); +} + +# end of POSIX::getpwuid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/gets.al b/Master/tlpkg/installer/perllib/auto/POSIX/gets.al new file mode 100644 index 00000000000..34667890e6e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/gets.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 323 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gets.al)" +sub gets { + usage "gets()" if @_ != 0; + scalar <STDIN>; +} + +# end of POSIX::gets +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/getuid.al b/Master/tlpkg/installer/perllib/auto/POSIX/getuid.al new file mode 100644 index 00000000000..5a326ec67f0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/getuid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 700 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\getuid.al)" +sub getuid { + usage "getuid()" if @_ != 0; + $<; +} + +# end of POSIX::getuid +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/gmtime.al b/Master/tlpkg/installer/perllib/auto/POSIX/gmtime.al new file mode 100644 index 00000000000..6bbf4fc6fef --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/gmtime.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 600 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\gmtime.al)" +sub gmtime { + usage "gmtime(time)" if @_ != 1; + CORE::gmtime($_[0]); +} + +# end of POSIX::gmtime +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/isatty.al b/Master/tlpkg/installer/perllib/auto/POSIX/isatty.al new file mode 100644 index 00000000000..9ab71b3c2a0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/isatty.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 705 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\isatty.al)" +sub isatty { + usage "isatty(filehandle)" if @_ != 1; + -t $_[0]; +} + +# end of POSIX::isatty +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/kill.al b/Master/tlpkg/installer/perllib/auto/POSIX/kill.al new file mode 100644 index 00000000000..12f5276f5f8 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/kill.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 211 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\kill.al)" +sub kill { + usage "kill(pid, sig)" if @_ != 2; + CORE::kill $_[1], $_[0]; +} + +# end of POSIX::kill +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/labs.al b/Master/tlpkg/installer/perllib/auto/POSIX/labs.al new file mode 100644 index 00000000000..581a1897d73 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/labs.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 445 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\labs.al)" +sub labs { + unimpl "labs() is C-specific, use abs instead"; +} + +# end of POSIX::labs +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/ldiv.al b/Master/tlpkg/installer/perllib/auto/POSIX/ldiv.al new file mode 100644 index 00000000000..1b704c1fad4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/ldiv.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 449 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ldiv.al)" +sub ldiv { + unimpl "ldiv() is C-specific, use /, % and int instead"; +} + +# end of POSIX::ldiv +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/link.al b/Master/tlpkg/installer/perllib/auto/POSIX/link.al new file mode 100644 index 00000000000..e78401a321d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/link.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 710 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\link.al)" +sub link { + usage "link(oldfilename, newfilename)" if @_ != 2; + CORE::link($_[0], $_[1]); +} + +# end of POSIX::link +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/load_imports.al b/Master/tlpkg/installer/perllib/auto/POSIX/load_imports.al new file mode 100644 index 00000000000..6c2ff0ad2ac --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/load_imports.al @@ -0,0 +1,225 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 743 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\load_imports.al)" +sub load_imports { +%EXPORT_TAGS = ( + + assert_h => [qw(assert NDEBUG)], + + ctype_h => [qw(isalnum isalpha iscntrl isdigit isgraph islower + isprint ispunct isspace isupper isxdigit tolower toupper)], + + dirent_h => [], + + errno_h => [qw(E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT + EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED + ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT + EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS + EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK + EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH + ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM + ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR + ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM + EPFNOSUPPORT EPIPE EPROCLIM EPROTONOSUPPORT EPROTOTYPE + ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT + ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY + EUSERS EWOULDBLOCK EXDEV errno)], + + fcntl_h => [qw(FD_CLOEXEC F_DUPFD F_GETFD F_GETFL F_GETLK F_RDLCK + F_SETFD F_SETFL F_SETLK F_SETLKW F_UNLCK F_WRLCK + O_ACCMODE O_APPEND O_CREAT O_EXCL O_NOCTTY O_NONBLOCK + O_RDONLY O_RDWR O_TRUNC O_WRONLY + creat + SEEK_CUR SEEK_END SEEK_SET + S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU + S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG S_ISUID + S_IWGRP S_IWOTH S_IWUSR)], + + float_h => [qw(DBL_DIG DBL_EPSILON DBL_MANT_DIG + DBL_MAX DBL_MAX_10_EXP DBL_MAX_EXP + DBL_MIN DBL_MIN_10_EXP DBL_MIN_EXP + FLT_DIG FLT_EPSILON FLT_MANT_DIG + FLT_MAX FLT_MAX_10_EXP FLT_MAX_EXP + FLT_MIN FLT_MIN_10_EXP FLT_MIN_EXP + FLT_RADIX FLT_ROUNDS + LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG + LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP + LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP)], + + grp_h => [], + + limits_h => [qw( ARG_MAX CHAR_BIT CHAR_MAX CHAR_MIN CHILD_MAX + INT_MAX INT_MIN LINK_MAX LONG_MAX LONG_MIN MAX_CANON + MAX_INPUT MB_LEN_MAX NAME_MAX NGROUPS_MAX OPEN_MAX + PATH_MAX PIPE_BUF SCHAR_MAX SCHAR_MIN SHRT_MAX SHRT_MIN + SSIZE_MAX STREAM_MAX TZNAME_MAX UCHAR_MAX UINT_MAX + ULONG_MAX USHRT_MAX _POSIX_ARG_MAX _POSIX_CHILD_MAX + _POSIX_LINK_MAX _POSIX_MAX_CANON _POSIX_MAX_INPUT + _POSIX_NAME_MAX _POSIX_NGROUPS_MAX _POSIX_OPEN_MAX + _POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX + _POSIX_STREAM_MAX _POSIX_TZNAME_MAX)], + + locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES + LC_MONETARY LC_NUMERIC LC_TIME NULL + localeconv setlocale)], + + math_h => [qw(HUGE_VAL acos asin atan ceil cosh fabs floor fmod + frexp ldexp log10 modf pow sinh tan tanh)], + + pwd_h => [], + + setjmp_h => [qw(longjmp setjmp siglongjmp sigsetjmp)], + + signal_h => [qw(SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK + SA_RESETHAND SA_RESTART SA_SIGINFO SIGABRT SIGALRM + SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL + SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN + SIGTTOU SIGUSR1 SIGUSR2 SIG_BLOCK SIG_DFL SIG_ERR + SIG_IGN SIG_SETMASK SIG_UNBLOCK raise sigaction signal + sigpending sigprocmask sigsuspend)], + + stdarg_h => [], + + stddef_h => [qw(NULL offsetof)], + + stdio_h => [qw(BUFSIZ EOF FILENAME_MAX L_ctermid L_cuserid + L_tmpname NULL SEEK_CUR SEEK_END SEEK_SET + STREAM_MAX TMP_MAX stderr stdin stdout + clearerr fclose fdopen feof ferror fflush fgetc fgetpos + fgets fopen fprintf fputc fputs fread freopen + fscanf fseek fsetpos ftell fwrite getchar gets + perror putc putchar puts remove rewind + scanf setbuf setvbuf sscanf tmpfile tmpnam + ungetc vfprintf vprintf vsprintf)], + + stdlib_h => [qw(EXIT_FAILURE EXIT_SUCCESS MB_CUR_MAX NULL RAND_MAX + abort atexit atof atoi atol bsearch calloc div + free getenv labs ldiv malloc mblen mbstowcs mbtowc + qsort realloc strtod strtol strtoul wcstombs wctomb)], + + string_h => [qw(NULL memchr memcmp memcpy memmove memset strcat + strchr strcmp strcoll strcpy strcspn strerror strlen + strncat strncmp strncpy strpbrk strrchr strspn strstr + strtok strxfrm)], + + sys_stat_h => [qw(S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU + S_ISBLK S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISREG + S_ISUID S_IWGRP S_IWOTH S_IWUSR S_IXGRP S_IXOTH S_IXUSR + fstat mkfifo)], + + sys_times_h => [], + + sys_types_h => [], + + sys_utsname_h => [qw(uname)], + + sys_wait_h => [qw(WEXITSTATUS WIFEXITED WIFSIGNALED WIFSTOPPED + WNOHANG WSTOPSIG WTERMSIG WUNTRACED)], + + termios_h => [qw( B0 B110 B1200 B134 B150 B1800 B19200 B200 B2400 + B300 B38400 B4800 B50 B600 B75 B9600 BRKINT CLOCAL + CREAD CS5 CS6 CS7 CS8 CSIZE CSTOPB ECHO ECHOE ECHOK + ECHONL HUPCL ICANON ICRNL IEXTEN IGNBRK IGNCR IGNPAR + INLCR INPCK ISIG ISTRIP IXOFF IXON NCCS NOFLSH OPOST + PARENB PARMRK PARODD TCIFLUSH TCIOFF TCIOFLUSH TCION + TCOFLUSH TCOOFF TCOON TCSADRAIN TCSAFLUSH TCSANOW + TOSTOP VEOF VEOL VERASE VINTR VKILL VMIN VQUIT VSTART + VSTOP VSUSP VTIME + cfgetispeed cfgetospeed cfsetispeed cfsetospeed tcdrain + tcflow tcflush tcgetattr tcsendbreak tcsetattr )], + + time_h => [qw(CLK_TCK CLOCKS_PER_SEC NULL asctime clock ctime + difftime mktime strftime tzset tzname)], + + unistd_h => [qw(F_OK NULL R_OK SEEK_CUR SEEK_END SEEK_SET + STDERR_FILENO STDIN_FILENO STDOUT_FILENO W_OK X_OK + _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_MAX_CANON + _PC_MAX_INPUT _PC_NAME_MAX _PC_NO_TRUNC _PC_PATH_MAX + _PC_PIPE_BUF _PC_VDISABLE _POSIX_CHOWN_RESTRICTED + _POSIX_JOB_CONTROL _POSIX_NO_TRUNC _POSIX_SAVED_IDS + _POSIX_VDISABLE _POSIX_VERSION _SC_ARG_MAX + _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL + _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS + _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION + _exit access ctermid cuserid + dup2 dup execl execle execlp execv execve execvp + fpathconf fsync getcwd getegid geteuid getgid getgroups + getpid getuid isatty lseek pathconf pause setgid setpgid + setsid setuid sysconf tcgetpgrp tcsetpgrp ttyname)], + + utime_h => [], + +); + +# Exporter::export_tags(); +for (values %EXPORT_TAGS) { + push @EXPORT, @$_; +} + +@EXPORT_OK = qw( + abs + alarm + atan2 + chdir + chmod + chown + close + closedir + cos + exit + exp + fcntl + fileno + fork + getc + getgrgid + getgrnam + getlogin + getpgrp + getppid + getpwnam + getpwuid + gmtime + isatty + kill + lchown + link + localtime + log + mkdir + nice + open + opendir + pipe + printf + rand + read + readdir + rename + rewinddir + rmdir + sin + sleep + sprintf + sqrt + srand + stat + system + time + times + umask + unlink + utime + wait + waitpid + write +); + +require Exporter; +} + +# end of POSIX::SigAction::load_imports +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/localtime.al b/Master/tlpkg/installer/perllib/auto/POSIX/localtime.al new file mode 100644 index 00000000000..dde4f5769ef --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/localtime.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 605 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\localtime.al)" +sub localtime { + usage "localtime(time)" if @_ != 1; + CORE::localtime($_[0]); +} + +# end of POSIX::localtime +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/log.al b/Master/tlpkg/installer/perllib/auto/POSIX/log.al new file mode 100644 index 00000000000..6e400f25866 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/log.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 165 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\log.al)" +sub log { + usage "log(x)" if @_ != 1; + CORE::log($_[0]); +} + +# end of POSIX::log +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/longjmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/longjmp.al new file mode 100644 index 00000000000..f3dd3263086 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/longjmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 195 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\longjmp.al)" +sub longjmp { + unimpl "longjmp() is C-specific: use die instead"; +} + +# end of POSIX::longjmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/malloc.al b/Master/tlpkg/installer/perllib/auto/POSIX/malloc.al new file mode 100644 index 00000000000..2f50c6da70a --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/malloc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 453 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\malloc.al)" +sub malloc { + unimpl "malloc() is C-specific, stopped"; +} + +# end of POSIX::malloc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/memchr.al b/Master/tlpkg/installer/perllib/auto/POSIX/memchr.al new file mode 100644 index 00000000000..bcdfac6200b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/memchr.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 478 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memchr.al)" +sub memchr { + unimpl "memchr() is C-specific, use index() instead"; +} + +# end of POSIX::memchr +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/memcmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/memcmp.al new file mode 100644 index 00000000000..e01575259d4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/memcmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 482 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcmp.al)" +sub memcmp { + unimpl "memcmp() is C-specific, use eq instead"; +} + +# end of POSIX::memcmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/memcpy.al b/Master/tlpkg/installer/perllib/auto/POSIX/memcpy.al new file mode 100644 index 00000000000..b096a059be9 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/memcpy.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 486 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memcpy.al)" +sub memcpy { + unimpl "memcpy() is C-specific, use = instead"; +} + +# end of POSIX::memcpy +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/memmove.al b/Master/tlpkg/installer/perllib/auto/POSIX/memmove.al new file mode 100644 index 00000000000..dd29e805f70 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/memmove.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 490 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memmove.al)" +sub memmove { + unimpl "memmove() is C-specific, use = instead"; +} + +# end of POSIX::memmove +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/memset.al b/Master/tlpkg/installer/perllib/auto/POSIX/memset.al new file mode 100644 index 00000000000..407980dd938 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/memset.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 494 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\memset.al)" +sub memset { + unimpl "memset() is C-specific, use x instead"; +} + +# end of POSIX::memset +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/mkdir.al b/Master/tlpkg/installer/perllib/auto/POSIX/mkdir.al new file mode 100644 index 00000000000..edb004a11e8 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/mkdir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 575 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\mkdir.al)" +sub mkdir { + usage "mkdir(directoryname, mode)" if @_ != 2; + CORE::mkdir($_[0], $_[1]); +} + +# end of POSIX::mkdir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/offsetof.al b/Master/tlpkg/installer/perllib/auto/POSIX/offsetof.al new file mode 100644 index 00000000000..83c2df0e521 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/offsetof.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 221 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\offsetof.al)" +sub offsetof { + unimpl "offsetof() is C-specific, stopped"; +} + +# end of POSIX::offsetof +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/opendir.al b/Master/tlpkg/installer/perllib/auto/POSIX/opendir.al new file mode 100644 index 00000000000..9c508b64371 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/opendir.al @@ -0,0 +1,16 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 102 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\opendir.al)" +sub opendir { + usage "opendir(directory)" if @_ != 1; + my $dirhandle; + CORE::opendir($dirhandle, $_[0]) + ? $dirhandle + : undef; +} + +# end of POSIX::opendir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/perror.al b/Master/tlpkg/installer/perllib/auto/POSIX/perror.al new file mode 100644 index 00000000000..df53df18eff --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/perror.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 328 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\perror.al)" +sub perror { + print STDERR "@_: " if @_; + print STDERR $!,"\n"; +} + +# end of POSIX::perror +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/pow.al b/Master/tlpkg/installer/perllib/auto/POSIX/pow.al new file mode 100644 index 00000000000..9f1ac2fc14f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/pow.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 170 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\pow.al)" +sub pow { + usage "pow(x,exponent)" if @_ != 2; + $_[0] ** $_[1]; +} + +# end of POSIX::pow +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/printf.al b/Master/tlpkg/installer/perllib/auto/POSIX/printf.al new file mode 100644 index 00000000000..28b07d21cd1 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/printf.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 333 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\printf.al)" +sub printf { + usage "printf(pattern, args...)" if @_ < 1; + CORE::printf STDOUT @_; +} + +# end of POSIX::printf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/putc.al b/Master/tlpkg/installer/perllib/auto/POSIX/putc.al new file mode 100644 index 00000000000..484984bcd9f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/putc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 338 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putc.al)" +sub putc { + unimpl "putc() is C-specific--use print instead"; +} + +# end of POSIX::putc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/putchar.al b/Master/tlpkg/installer/perllib/auto/POSIX/putchar.al new file mode 100644 index 00000000000..a85a0d79b36 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/putchar.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 342 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\putchar.al)" +sub putchar { + unimpl "putchar() is C-specific--use print instead"; +} + +# end of POSIX::putchar +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/puts.al b/Master/tlpkg/installer/perllib/auto/POSIX/puts.al new file mode 100644 index 00000000000..0bd3f4f3b3c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/puts.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 346 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\puts.al)" +sub puts { + unimpl "puts() is C-specific--use print instead"; +} + +# end of POSIX::puts +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/qsort.al b/Master/tlpkg/installer/perllib/auto/POSIX/qsort.al new file mode 100644 index 00000000000..1621e6db521 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/qsort.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 457 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\qsort.al)" +sub qsort { + unimpl "qsort() is C-specific, use sort instead"; +} + +# end of POSIX::qsort +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/raise.al b/Master/tlpkg/installer/perllib/auto/POSIX/raise.al new file mode 100644 index 00000000000..3d078d08f35 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/raise.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 216 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\raise.al)" +sub raise { + usage "raise(sig)" if @_ != 1; + CORE::kill $_[0], $$; # Is this good enough? +} + +# end of POSIX::raise +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/rand.al b/Master/tlpkg/installer/perllib/auto/POSIX/rand.al new file mode 100644 index 00000000000..78d16fe53cc --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/rand.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 461 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rand.al)" +sub rand { + unimpl "rand() is non-portable, use Perl's rand instead"; +} + +# end of POSIX::rand +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/readdir.al b/Master/tlpkg/installer/perllib/auto/POSIX/readdir.al new file mode 100644 index 00000000000..395379abb86 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/readdir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 110 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\readdir.al)" +sub readdir { + usage "readdir(dirhandle)" if @_ != 1; + CORE::readdir($_[0]); +} + +# end of POSIX::readdir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/realloc.al b/Master/tlpkg/installer/perllib/auto/POSIX/realloc.al new file mode 100644 index 00000000000..949c4fc3b77 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/realloc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 465 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\realloc.al)" +sub realloc { + unimpl "realloc() is C-specific, stopped"; +} + +# end of POSIX::realloc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/redef.al b/Master/tlpkg/installer/perllib/auto/POSIX/redef.al new file mode 100644 index 00000000000..d667327d6b4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/redef.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 69 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\redef.al)" +sub redef { + my ($mess) = @_; + croak "Use method $mess instead"; +} + +# end of POSIX::redef +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/remove.al b/Master/tlpkg/installer/perllib/auto/POSIX/remove.al new file mode 100644 index 00000000000..e29b4531d68 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/remove.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 350 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\remove.al)" +sub remove { + usage "remove(filename)" if @_ != 1; + CORE::unlink($_[0]); +} + +# end of POSIX::remove +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/rename.al b/Master/tlpkg/installer/perllib/auto/POSIX/rename.al new file mode 100644 index 00000000000..6087fefa798 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/rename.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 355 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rename.al)" +sub rename { + usage "rename(oldfilename, newfilename)" if @_ != 2; + CORE::rename($_[0], $_[1]); +} + +# end of POSIX::rename +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/rewind.al b/Master/tlpkg/installer/perllib/auto/POSIX/rewind.al new file mode 100644 index 00000000000..a07216f1c51 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/rewind.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 360 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewind.al)" +sub rewind { + usage "rewind(filehandle)" if @_ != 1; + CORE::seek($_[0],0,0); +} + +# end of POSIX::rewind +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/rewinddir.al b/Master/tlpkg/installer/perllib/auto/POSIX/rewinddir.al new file mode 100644 index 00000000000..c01271a33d8 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/rewinddir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 115 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rewinddir.al)" +sub rewinddir { + usage "rewinddir(dirhandle)" if @_ != 1; + CORE::rewinddir($_[0]); +} + +# end of POSIX::rewinddir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/rmdir.al b/Master/tlpkg/installer/perllib/auto/POSIX/rmdir.al new file mode 100644 index 00000000000..b94bdf166ee --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/rmdir.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 715 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\rmdir.al)" +sub rmdir { + usage "rmdir(directoryname)" if @_ != 1; + CORE::rmdir($_[0]); +} + +# end of POSIX::rmdir +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/scanf.al b/Master/tlpkg/installer/perllib/auto/POSIX/scanf.al new file mode 100644 index 00000000000..2d4ff839328 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/scanf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 365 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\scanf.al)" +sub scanf { + unimpl "scanf() is C-specific--use <> and regular expressions instead"; +} + +# end of POSIX::scanf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/setbuf.al b/Master/tlpkg/installer/perllib/auto/POSIX/setbuf.al new file mode 100644 index 00000000000..a7de25518fa --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/setbuf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 720 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setbuf.al)" +sub setbuf { + redef "IO::Handle::setbuf()"; +} + +# end of POSIX::setbuf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/setjmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/setjmp.al new file mode 100644 index 00000000000..780deb31940 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/setjmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 199 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setjmp.al)" +sub setjmp { + unimpl "setjmp() is C-specific: use eval {} instead"; +} + +# end of POSIX::setjmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/setvbuf.al b/Master/tlpkg/installer/perllib/auto/POSIX/setvbuf.al new file mode 100644 index 00000000000..b134e52528d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/setvbuf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 724 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\setvbuf.al)" +sub setvbuf { + redef "IO::Handle::setvbuf()"; +} + +# end of POSIX::setvbuf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/siglongjmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/siglongjmp.al new file mode 100644 index 00000000000..ab46fac02b6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/siglongjmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 203 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\siglongjmp.al)" +sub siglongjmp { + unimpl "siglongjmp() is C-specific: use die instead"; +} + +# end of POSIX::siglongjmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sigsetjmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/sigsetjmp.al new file mode 100644 index 00000000000..31e563c6f4f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sigsetjmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 207 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sigsetjmp.al)" +sub sigsetjmp { + unimpl "sigsetjmp() is C-specific: use eval {} instead"; +} + +# end of POSIX::sigsetjmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sin.al b/Master/tlpkg/installer/perllib/auto/POSIX/sin.al new file mode 100644 index 00000000000..9464a28bfea --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sin.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 175 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sin.al)" +sub sin { + usage "sin(x)" if @_ != 1; + CORE::sin($_[0]); +} + +# end of POSIX::sin +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sleep.al b/Master/tlpkg/installer/perllib/auto/POSIX/sleep.al new file mode 100644 index 00000000000..e58de4d5602 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sleep.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 728 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sleep.al)" +sub sleep { + usage "sleep(seconds)" if @_ != 1; + $_[0] - CORE::sleep($_[0]); +} + +# end of POSIX::sleep +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sprintf.al b/Master/tlpkg/installer/perllib/auto/POSIX/sprintf.al new file mode 100644 index 00000000000..75e6bc5e277 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sprintf.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 369 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sprintf.al)" +sub sprintf { + usage "sprintf(pattern,args)" if @_ == 0; + CORE::sprintf(shift,@_); +} + +# end of POSIX::sprintf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sqrt.al b/Master/tlpkg/installer/perllib/auto/POSIX/sqrt.al new file mode 100644 index 00000000000..54a2976e2da --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sqrt.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 180 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sqrt.al)" +sub sqrt { + usage "sqrt(x)" if @_ != 1; + CORE::sqrt($_[0]); +} + +# end of POSIX::sqrt +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/srand.al b/Master/tlpkg/installer/perllib/auto/POSIX/srand.al new file mode 100644 index 00000000000..b85fd14c60b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/srand.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 469 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\srand.al)" +sub srand { + unimpl "srand()"; +} + +# end of POSIX::srand +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/sscanf.al b/Master/tlpkg/installer/perllib/auto/POSIX/sscanf.al new file mode 100644 index 00000000000..b6869491e5d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/sscanf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 374 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\sscanf.al)" +sub sscanf { + unimpl "sscanf() is C-specific--use regular expressions instead"; +} + +# end of POSIX::sscanf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/stat.al b/Master/tlpkg/installer/perllib/auto/POSIX/stat.al new file mode 100644 index 00000000000..4016c0e88ab --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/stat.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 580 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\stat.al)" +sub stat { + usage "stat(filename)" if @_ != 1; + CORE::stat($_[0]); +} + +# end of POSIX::stat +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strcat.al b/Master/tlpkg/installer/perllib/auto/POSIX/strcat.al new file mode 100644 index 00000000000..6b9602b93c6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strcat.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 498 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcat.al)" +sub strcat { + unimpl "strcat() is C-specific, use .= instead"; +} + +# end of POSIX::strcat +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strchr.al b/Master/tlpkg/installer/perllib/auto/POSIX/strchr.al new file mode 100644 index 00000000000..36a59233340 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strchr.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 502 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strchr.al)" +sub strchr { + unimpl "strchr() is C-specific, use index() instead"; +} + +# end of POSIX::strchr +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strcmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/strcmp.al new file mode 100644 index 00000000000..b0447b9f1db --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strcmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 506 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcmp.al)" +sub strcmp { + unimpl "strcmp() is C-specific, use eq instead"; +} + +# end of POSIX::strcmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strcpy.al b/Master/tlpkg/installer/perllib/auto/POSIX/strcpy.al new file mode 100644 index 00000000000..5660760b81d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strcpy.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 510 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcpy.al)" +sub strcpy { + unimpl "strcpy() is C-specific, use = instead"; +} + +# end of POSIX::strcpy +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strcspn.al b/Master/tlpkg/installer/perllib/auto/POSIX/strcspn.al new file mode 100644 index 00000000000..4a46be8baaa --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strcspn.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 514 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strcspn.al)" +sub strcspn { + unimpl "strcspn() is C-specific, use regular expressions instead"; +} + +# end of POSIX::strcspn +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strerror.al b/Master/tlpkg/installer/perllib/auto/POSIX/strerror.al new file mode 100644 index 00000000000..cc4c86dbae4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strerror.al @@ -0,0 +1,14 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 518 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strerror.al)" +sub strerror { + usage "strerror(errno)" if @_ != 1; + local $! = $_[0]; + $! . ""; +} + +# end of POSIX::strerror +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strlen.al b/Master/tlpkg/installer/perllib/auto/POSIX/strlen.al new file mode 100644 index 00000000000..9cc9df2d315 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strlen.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 524 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strlen.al)" +sub strlen { + unimpl "strlen() is C-specific, use length instead"; +} + +# end of POSIX::strlen +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strncat.al b/Master/tlpkg/installer/perllib/auto/POSIX/strncat.al new file mode 100644 index 00000000000..4f09a52c298 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strncat.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 528 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncat.al)" +sub strncat { + unimpl "strncat() is C-specific, use .= instead"; +} + +# end of POSIX::strncat +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strncmp.al b/Master/tlpkg/installer/perllib/auto/POSIX/strncmp.al new file mode 100644 index 00000000000..b4dfc9ab0b4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strncmp.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 532 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncmp.al)" +sub strncmp { + unimpl "strncmp() is C-specific, use eq instead"; +} + +# end of POSIX::strncmp +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strncpy.al b/Master/tlpkg/installer/perllib/auto/POSIX/strncpy.al new file mode 100644 index 00000000000..98b3c081e68 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strncpy.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 536 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strncpy.al)" +sub strncpy { + unimpl "strncpy() is C-specific, use = instead"; +} + +# end of POSIX::strncpy +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strpbrk.al b/Master/tlpkg/installer/perllib/auto/POSIX/strpbrk.al new file mode 100644 index 00000000000..227c00d76cc --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strpbrk.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 540 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strpbrk.al)" +sub strpbrk { + unimpl "strpbrk() is C-specific, stopped"; +} + +# end of POSIX::strpbrk +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strrchr.al b/Master/tlpkg/installer/perllib/auto/POSIX/strrchr.al new file mode 100644 index 00000000000..1dd2a6ebf04 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strrchr.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 544 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strrchr.al)" +sub strrchr { + unimpl "strrchr() is C-specific, use rindex() instead"; +} + +# end of POSIX::strrchr +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strspn.al b/Master/tlpkg/installer/perllib/auto/POSIX/strspn.al new file mode 100644 index 00000000000..3bd65863563 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strspn.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 548 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strspn.al)" +sub strspn { + unimpl "strspn() is C-specific, stopped"; +} + +# end of POSIX::strspn +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strstr.al b/Master/tlpkg/installer/perllib/auto/POSIX/strstr.al new file mode 100644 index 00000000000..f755459b68f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strstr.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 552 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strstr.al)" +sub strstr { + usage "strstr(big, little)" if @_ != 2; + CORE::index($_[0], $_[1]); +} + +# end of POSIX::strstr +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/strtok.al b/Master/tlpkg/installer/perllib/auto/POSIX/strtok.al new file mode 100644 index 00000000000..bae94c9282a --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/strtok.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 557 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\strtok.al)" +sub strtok { + unimpl "strtok() is C-specific, stopped"; +} + +# end of POSIX::strtok +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/system.al b/Master/tlpkg/installer/perllib/auto/POSIX/system.al new file mode 100644 index 00000000000..1b51e8f5209 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/system.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 473 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\system.al)" +sub system { + usage "system(command)" if @_ != 1; + CORE::system($_[0]); +} + +# end of POSIX::system +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/time.al b/Master/tlpkg/installer/perllib/auto/POSIX/time.al new file mode 100644 index 00000000000..6b404400fd4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/time.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 610 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\time.al)" +sub time { + usage "time()" if @_ != 0; + CORE::time; +} + +# end of POSIX::time +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/tmpfile.al b/Master/tlpkg/installer/perllib/auto/POSIX/tmpfile.al new file mode 100644 index 00000000000..aa223d6a27c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/tmpfile.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 378 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tmpfile.al)" +sub tmpfile { + redef "IO::File::new_tmpfile()"; +} + +# end of POSIX::tmpfile +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/tolower.al b/Master/tlpkg/installer/perllib/auto/POSIX/tolower.al new file mode 100644 index 00000000000..57937313fc9 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/tolower.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 87 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\tolower.al)" +sub tolower { + usage "tolower(string)" if @_ != 1; + lc($_[0]); +} + +# end of POSIX::tolower +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/toupper.al b/Master/tlpkg/installer/perllib/auto/POSIX/toupper.al new file mode 100644 index 00000000000..a5484a70aa6 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/toupper.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 92 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\toupper.al)" +sub toupper { + usage "toupper(string)" if @_ != 1; + uc($_[0]); +} + +# end of POSIX::toupper +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/umask.al b/Master/tlpkg/installer/perllib/auto/POSIX/umask.al new file mode 100644 index 00000000000..8bf64ae7f0e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/umask.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 585 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\umask.al)" +sub umask { + usage "umask(mask)" if @_ != 1; + CORE::umask($_[0]); +} + +# end of POSIX::umask +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/ungetc.al b/Master/tlpkg/installer/perllib/auto/POSIX/ungetc.al new file mode 100644 index 00000000000..874e4416f71 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/ungetc.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 382 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\ungetc.al)" +sub ungetc { + redef "IO::Handle::ungetc()"; +} + +# end of POSIX::ungetc +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/unimpl.al b/Master/tlpkg/installer/perllib/auto/POSIX/unimpl.al new file mode 100644 index 00000000000..e1c36c60f85 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/unimpl.al @@ -0,0 +1,14 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 74 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unimpl.al)" +sub unimpl { + my ($mess) = @_; + $mess =~ s/xxx//; + croak "Unimplemented: POSIX::$mess"; +} + +# end of POSIX::unimpl +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/unlink.al b/Master/tlpkg/installer/perllib/auto/POSIX/unlink.al new file mode 100644 index 00000000000..c8f58ab9836 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/unlink.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 733 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\unlink.al)" +sub unlink { + usage "unlink(filename)" if @_ != 1; + CORE::unlink($_[0]); +} + +# end of POSIX::unlink +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/usage.al b/Master/tlpkg/installer/perllib/auto/POSIX/usage.al new file mode 100644 index 00000000000..0b2b0bd6115 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/usage.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 64 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\usage.al)" +sub usage { + my ($mess) = @_; + croak "Usage: POSIX::$mess"; +} + +# end of POSIX::usage +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/utime.al b/Master/tlpkg/installer/perllib/auto/POSIX/utime.al new file mode 100644 index 00000000000..68008e7e110 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/utime.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 738 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\utime.al)" +sub utime { + usage "utime(filename, atime, mtime)" if @_ != 3; + CORE::utime($_[1], $_[2], $_[0]); +} + +# end of POSIX::utime +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/vfprintf.al b/Master/tlpkg/installer/perllib/auto/POSIX/vfprintf.al new file mode 100644 index 00000000000..fb502afc761 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/vfprintf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 386 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vfprintf.al)" +sub vfprintf { + unimpl "vfprintf() is C-specific"; +} + +# end of POSIX::vfprintf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/vprintf.al b/Master/tlpkg/installer/perllib/auto/POSIX/vprintf.al new file mode 100644 index 00000000000..28108face71 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/vprintf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 390 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vprintf.al)" +sub vprintf { + unimpl "vprintf() is C-specific"; +} + +# end of POSIX::vprintf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/vsprintf.al b/Master/tlpkg/installer/perllib/auto/POSIX/vsprintf.al new file mode 100644 index 00000000000..9d4f008ebbc --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/vsprintf.al @@ -0,0 +1,12 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 394 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\vsprintf.al)" +sub vsprintf { + unimpl "vsprintf() is C-specific"; +} + +# end of POSIX::vsprintf +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/wait.al b/Master/tlpkg/installer/perllib/auto/POSIX/wait.al new file mode 100644 index 00000000000..57d9701f4ff --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/wait.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 590 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\wait.al)" +sub wait { + usage "wait()" if @_ != 0; + CORE::wait(); +} + +# end of POSIX::wait +1; diff --git a/Master/tlpkg/installer/perllib/auto/POSIX/waitpid.al b/Master/tlpkg/installer/perllib/auto/POSIX/waitpid.al new file mode 100644 index 00000000000..6cd31c21009 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/POSIX/waitpid.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ..\..\lib\POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 595 "..\..\lib\POSIX.pm (autosplit into ..\..\lib\auto\POSIX\waitpid.al)" +sub waitpid { + usage "waitpid(pid, options)" if @_ != 2; + CORE::waitpid($_[0], $_[1]); +} + +# end of POSIX::waitpid +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.bs b/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.bs diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.dll b/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.dll Binary files differnew file mode 100755 index 00000000000..85fdb8e0f02 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Canvas/Canvas.dll diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/AddScrollbars.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/AddScrollbars.al new file mode 100644 index 00000000000..aa12259f675 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/AddScrollbars.al @@ -0,0 +1,52 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 225 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\AddScrollbars.al)" +sub AddScrollbars +{ + require Tk::Scrollbar; + my ($cw,$w) = @_; + my $def = ''; + my ($x,$y) = ('',''); + my $s = 0; + my $c; + $cw->freeze_on_map; + foreach $c ($w->configure) + { + my $opt = $c->[0]; + if ($opt eq '-yscrollcommand') + { + my $slice = Tk::Frame->new($cw,Name => 'ysbslice'); + my $ysb = Tk::Scrollbar->new($slice,-orient => 'vertical', -command => [ 'yview', $w ]); + my $size = $ysb->cget('-width'); + my $corner = Tk::Frame->new($slice,Name=>'corner','-relief' => 'raised', + '-width' => $size, '-height' => $size); + $ysb->pack(-side => 'left', -fill => 'y'); + $cw->Advertise('yscrollbar' => $ysb); + $cw->Advertise('corner' => $corner); + $cw->Advertise('ysbslice' => $slice); + $corner->{'before'} = $ysb->PathName; + $slice->{'before'} = $w->PathName; + $y = 'w'; + $s = 1; + } + elsif ($opt eq '-xscrollcommand') + { + my $xsb = Tk::Scrollbar->new($cw,-orient => 'horizontal', -command => [ 'xview', $w ]); + $cw->Advertise('xscrollbar' => $xsb); + $xsb->{'before'} = $w->PathName; + $x = 's'; + $s = 1; + } + } + if ($s) + { + $cw->Advertise('scrolled' => $w); + $cw->ConfigSpecs('-scrollbars' => ['METHOD','scrollbars','Scrollbars',$x.$y]); + } +} + +# end of Tk::Frame::AddScrollbars +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/FindMenu.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/FindMenu.al new file mode 100644 index 00000000000..66e71c29b21 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/FindMenu.al @@ -0,0 +1,22 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 363 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\FindMenu.al)" +sub FindMenu +{ + my ($w,$char) = @_; + my $child; + my $match; + foreach $child ($w->children) + { + next unless (ref $child); + $match = $child->FindMenu($char); + return $match if (defined $match); + } + return undef; +} + +1; +# end of Tk::Frame::FindMenu diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/freeze_on_map.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/freeze_on_map.al new file mode 100644 index 00000000000..6a8b8a4f96e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/freeze_on_map.al @@ -0,0 +1,18 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 215 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\freeze_on_map.al)" +sub freeze_on_map +{ + my ($w) = @_; + unless ($w->Tk::bind('Freeze','<Map>')) + { + $w->Tk::bind('Freeze','<Map>',['packPropagate' => 0]) + } + $w->AddBindTag('Freeze'); +} + +# end of Tk::Frame::freeze_on_map +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/label.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/label.al new file mode 100644 index 00000000000..83ec70ed803 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/label.al @@ -0,0 +1,24 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 182 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\label.al)" +sub label +{ + my ($cw,$val) = @_; + my $var = $cw->cget('-labelVariable'); + if (@_ > 1 && defined $val) + { + if (!defined $var) + { + $var = \$cw->{Configure}{'-label'}; + $cw->labelVariable($var); + } + $$var = $val; + } + return (defined $var) ? $$var : undef;; +} + +# end of Tk::Frame::label +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelPack.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelPack.al new file mode 100644 index 00000000000..0cfa8631c24 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelPack.al @@ -0,0 +1,50 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 121 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelPack.al)" +sub labelPack +{ + my ($cw,$val) = @_; + my $w = $cw->Subwidget('label'); + my @result = (); + if (@_ > 1) + { + if (defined($w) && !defined($val)) + { + $w->packForget; + } + elsif (defined($val) && !defined ($w)) + { + require Tk::Label; + $w = Tk::Label->new($cw,-textvariable => $cw->labelVariable); + $cw->Advertise('label' => $w); + $cw->ConfigDelegate('label',qw(-text -textvariable)); + } + if (defined($val) && defined($w)) + { + my %pack = @$val; + unless (exists $pack{-side}) + { + $pack{-side} = 'top' unless (exists $pack{-side}); + } + unless (exists $pack{-fill}) + { + $pack{-fill} = 'x' if ($pack{-side} =~ /(top|bottom)/); + $pack{-fill} = 'y' if ($pack{-side} =~ /(left|right)/); + } + unless (exists($pack{'-before'}) || exists($pack{'-after'})) + { + my $before = ($cw->packSlaves)[0]; + $pack{'-before'} = $before if (defined $before); + } + $w->pack(%pack); + } + } + @result = $w->packInfo if (defined $w); + return (wantarray) ? @result : \@result; +} + +# end of Tk::Frame::labelPack +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelVariable.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelVariable.al new file mode 100644 index 00000000000..ca60cff1288 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/labelVariable.al @@ -0,0 +1,27 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 163 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\labelVariable.al)" +sub labelVariable +{ + my ($cw,$val) = @_; + my $var = \$cw->{Configure}{'-labelVariable'}; + if (@_ > 1 && defined $val) + { + $$var = $val; + $$val = '' unless (defined $$val); + my $w = $cw->Subwidget('label'); + unless (defined $w) + { + $cw->labelPack([]); + $w = $cw->Subwidget('label'); + } + $w->configure(-textvariable => $val); + } + return $$var; +} + +# end of Tk::Frame::labelVariable +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/packscrollbars.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/packscrollbars.al new file mode 100644 index 00000000000..9990eb67b13 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/packscrollbars.al @@ -0,0 +1,86 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 269 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\packscrollbars.al)" +sub packscrollbars +{ + my ($cw) = @_; + my $opt = $cw->cget('-scrollbars'); + my $slice = $cw->Subwidget('ysbslice'); + my $xsb = $cw->Subwidget('xscrollbar'); + my $corner = $cw->Subwidget('corner'); + my $w = $cw->Subwidget('scrolled'); + my $xside = (($opt =~ /n/) ? 'top' : 'bottom'); + my $havex = 0; + my $havey = 0; + $opt =~ s/r//; + $cw->{'pack_pending'} = 0; + if (defined $slice) + { + my $reqy; + my $ysb = $cw->Subwidget('yscrollbar'); + if ($opt =~ /(o)?[we]/ && (($reqy = !defined($1)) || $ysb->Needed)) + { + my $yside = (($opt =~ /w/) ? 'left' : 'right'); + $slice->pack(-side => $yside, -fill => 'y',-before => $slice->{'before'}); + $havey = 1; + if ($reqy) + { + $w->configure(-yscrollcommand => ['set', $ysb]); + } + else + { + $w->configure(-yscrollcommand => ['sbset', $cw, $ysb, \$cw->{'packysb'}]); + } + } + else + { + $w->configure(-yscrollcommand => undef) unless $opt =~ s/[we]//; + $slice->packForget; + } + $cw->{'packysb'} = $havey; + } + if (defined $xsb) + { + my $reqx; + if ($opt =~ /(o)?[ns]/ && (($reqx = !defined($1)) || $xsb->Needed)) + { + $xsb->pack(-side => $xside, -fill => 'x',-before => $xsb->{'before'}); + $havex = 1; + if ($reqx) + { + $w->configure(-xscrollcommand => ['set', $xsb]); + } + else + { + $w->configure(-xscrollcommand => ['sbset', $cw, $xsb, \$cw->{'packxsb'}]); + } + } + else + { + $w->configure(-xscrollcommand => undef) unless $opt =~ s/[ns]//; + $xsb->packForget; + } + $cw->{'packxsb'} = $havex; + } + if (defined $corner) + { + if ($havex && $havey && defined $corner->{'before'}) + { + my $anchor = $opt; + $anchor =~ s/o//g; + $corner->configure(-height => $xsb->ReqHeight); + $corner->pack(-before => $corner->{'before'}, -side => $xside, + -anchor => $anchor, -fill => 'x'); + } + else + { + $corner->packForget; + } + } +} + +# end of Tk::Frame::packscrollbars +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/queuePack.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/queuePack.al new file mode 100644 index 00000000000..59fe3ee4de0 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/queuePack.al @@ -0,0 +1,18 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 198 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\queuePack.al)" +sub queuePack +{ + my ($cw) = @_; + unless ($cw->{'pack_pending'}) + { + $cw->{'pack_pending'} = 1; + $cw->afterIdle([$cw,'packscrollbars']); + } +} + +# end of Tk::Frame::queuePack +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/sbset.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/sbset.al new file mode 100644 index 00000000000..cca4f0d642a --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/sbset.al @@ -0,0 +1,15 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 208 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\sbset.al)" +sub sbset +{ + my ($cw,$sb,$ref,@args) = @_; + $sb->set(@args); + $cw->queuePack if (@args == 2 && $sb->Needed != $$ref); +} + +# end of Tk::Frame::sbset +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Frame/scrollbars.al b/Master/tlpkg/installer/perllib/auto/Tk/Frame/scrollbars.al new file mode 100644 index 00000000000..21eeb53d2b9 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Frame/scrollbars.al @@ -0,0 +1,24 @@ +# NOTE: Derived from blib\lib\Tk\Frame.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Frame; + +#line 347 "blib\lib\Tk\Frame.pm (autosplit into blib\lib\auto\Tk\Frame\scrollbars.al)" +sub scrollbars +{ + my ($cw,$opt) = @_; + my $var = \$cw->{'-scrollbars'}; + if (@_ > 1) + { + my $old = $$var; + if (!defined $old || $old ne $opt) + { + $$var = $opt; + $cw->queuePack; + } + } + return $$var; +} + +# end of Tk::Frame::scrollbars +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonDown.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonDown.al new file mode 100644 index 00000000000..d80e2217abc --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonDown.al @@ -0,0 +1,55 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 116 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonDown.al)" +# tkScrollButtonDown -- +# This procedure is invoked when a button is pressed in a scrollbar. +# It changes the way the scrollbar is displayed and takes actions +# depending on where the mouse is. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +sub ButtonDown +{my $w = shift; + my $e = $w->XEvent; + my $element = $w->identify($e->x,$e->y); + $w->configure('-activerelief' => 'sunken'); + if ($e->b == 1 and + (defined($element) && $element eq 'slider')) + { + $w->StartDrag($e->x,$e->y); + } + elsif ($e->b == 2 and + (defined($element) && $element =~ /^(trough[12]|slider)$/o)) + { + my $pos = $w->fraction($e->x, $e->y); + my($head, $tail) = $w->get; + my $len = $tail - $head; + + $head = $pos - $len/2; + $tail = $pos + $len/2; + if ($head < 0) { + $head = 0; + $tail = $len; + } + elsif ($tail > 1) { + $head = 1 - $len; + $tail = 1; + } + $w->ScrlToPos($head); + $w->set($head, $tail); + + $w->StartDrag($e->x,$e->y); + } + else + { + $w->Select($element,'initial'); + } +} + +# end of Tk::Scrollbar::ButtonDown +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonUp.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonUp.al new file mode 100644 index 00000000000..68857548755 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ButtonUp.al @@ -0,0 +1,26 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 163 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ButtonUp.al)" +# tkScrollButtonUp -- +# This procedure is invoked when a button is released in a scrollbar. +# It cancels scans and auto-repeats that were in progress, and restores +# the way the active element is displayed. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates. + +sub ButtonUp +{my $w = shift; + my $e = $w->XEvent; + $w->CancelRepeat; + $w->configure('-activerelief' => 'raised'); + $w->EndDrag($e->x,$e->y); + $w->activate($w->identify($e->x,$e->y)); +} + +# end of Tk::Scrollbar::ButtonUp +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Drag.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Drag.al new file mode 100644 index 00000000000..988f9d4a3ef --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Drag.al @@ -0,0 +1,43 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 262 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Drag.al)" +# tkScrollDrag -- +# This procedure is called for each mouse motion even when the slider +# is being dragged. It notifies the associated widget if we're not +# jump scrolling, and it just updates the scrollbar if we are jump +# scrolling. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The current mouse position. + +sub Drag +{ + my($w,$x,$y) = @_; + return if !defined $initPos; + my $delta = $w->delta($x-$pressX, $y-$pressY); + if ($w->cget('-jump')) + { + if (@initValues == 2) + { + $w->set($initValues[0]+$delta, $initValues[1]+$delta); + } + else + { + $delta = sprintf "%d", $delta * $initValues[0]; # round() + $initValues[2] += $delta; + $initValues[3] += $delta; + $w->set(@initValues[2,3]); + } + } + else + { + $w->ScrlToPos($initPos+$delta); + } +} + +# end of Tk::Scrollbar::Drag +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/EndDrag.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/EndDrag.al new file mode 100644 index 00000000000..8c401b6fc31 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/EndDrag.al @@ -0,0 +1,28 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 297 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\EndDrag.al)" +# tkScrollEndDrag -- +# This procedure is called to end an interactive drag of the slider. +# It scrolls the window if we're in jump mode, otherwise it does nothing. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the end of the drag operation. + +sub EndDrag +{ + my($w,$x,$y) = @_; + return if (!defined $initPos); + if ($w->cget('-jump')) + { + my $delta = $w->delta($x-$pressX, $y-$pressY); + $w->ScrlToPos($initPos+$delta); + } + undef $initPos; +} + +# end of Tk::Scrollbar::EndDrag +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Enter.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Enter.al new file mode 100644 index 00000000000..9584a7fa34c --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Enter.al @@ -0,0 +1,21 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 86 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Enter.al)" +sub Enter +{ + my $w = shift; + my $e = $w->XEvent; + if ($Tk::strictMotif) + { + my $bg = $w->cget('-background'); + $activeBg = $w->cget('-activebackground'); + $w->configure('-activebackground' => $bg); + } + $w->activate($w->identify($e->x,$e->y)); +} + +# end of Tk::Scrollbar::Enter +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Leave.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Leave.al new file mode 100644 index 00000000000..a6c5e89d91e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Leave.al @@ -0,0 +1,18 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 99 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Leave.al)" +sub Leave +{ + my $w = shift; + if ($Tk::strictMotif) + { + $w->configure('-activebackground' => $activeBg) if (defined $activeBg) ; + } + $w->activate(''); +} + +# end of Tk::Scrollbar::Leave +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Motion.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Motion.al new file mode 100644 index 00000000000..46aac656c70 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Motion.al @@ -0,0 +1,15 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 109 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Motion.al)" +sub Motion +{ + my $w = shift; + my $e = $w->XEvent; + $w->activate($w->identify($e->x,$e->y)); +} + +# end of Tk::Scrollbar::Motion +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByPages.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByPages.al new file mode 100644 index 00000000000..9d4018e9128 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByPages.al @@ -0,0 +1,38 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 346 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByPages.al)" +# tkScrlByPages -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of screenfuls. It notifies the associated +# widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many screens to scroll: typically 1 or -1. + +sub ScrlByPages +{ + my $w = shift; + my $orient = shift; + my $amount = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + return if (index($orient,substr($w->cget('-orient'),0,1)) < 0); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('scroll',$amount,'pages'); + } + else + { + $cmd->Call($info[2]+$amount*($info[1]-1)); + } +} + +# end of Tk::Scrollbar::ScrlByPages +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByUnits.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByUnits.al new file mode 100644 index 00000000000..a364b3e52ce --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlByUnits.al @@ -0,0 +1,37 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 317 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlByUnits.al)" +# tkScrlByUnits -- +# This procedure tells the scrollbar's associated widget to scroll up +# or down by a given number of units. It notifies the associated widget +# in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# orient - Which kinds of scrollbars this applies to: "h" for +# horizontal, "v" for vertical, "hv" for both. +# amount - How many units to scroll: typically 1 or -1. + +sub ScrlByUnits +{my $w = shift; + my $orient = shift; + my $amount = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + return if (index($orient,substr($w->cget('-orient'),0,1)) < 0); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('scroll',$amount,'units'); + } + else + { + $cmd->Call($info[2]+$amount); + } +} + +# end of Tk::Scrollbar::ScrlByUnits +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlToPos.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlToPos.al new file mode 100644 index 00000000000..e277237953e --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlToPos.al @@ -0,0 +1,35 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 376 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlToPos.al)" +# tkScrlToPos -- +# This procedure tells the scrollbar's associated widget to scroll to +# a particular location, given by a fraction between 0 and 1. It notifies +# the associated widget in different ways for old and new command syntaxes. +# +# Arguments: +# w - The scrollbar widget. +# pos - A fraction between 0 and 1 indicating a desired position +# in the document. + +sub ScrlToPos +{ + my $w = shift; + my $pos = shift; + my $cmd = $w->cget('-command'); + return unless (defined $cmd); + my @info = $w->get; + if (@info == 2) + { + $cmd->Call('moveto',$pos); + } + else + { + $cmd->Call(int($info[0]*$pos)); + } +} + +# end of Tk::Scrollbar::ScrlToPos +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlTopBottom.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlTopBottom.al new file mode 100644 index 00000000000..7a00efe616f --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/ScrlTopBottom.al @@ -0,0 +1,32 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 403 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\ScrlTopBottom.al)" +# tkScrlTopBottom +# Scroll to the top or bottom of the document, depending on the mouse +# position. +# +# Arguments: +# w - The scrollbar widget. +# x, y - Mouse coordinates within the widget. + +sub ScrlTopBottom +{ + my $w = shift; + my $e = $w->XEvent; + my $element = $w->identify($e->x,$e->y); + return unless ($element); + if ($element =~ /1$/) + { + $w->ScrlToPos(0); + } + elsif ($element =~ /2$/) + { + $w->ScrlToPos(1); + } +} + +1; +# end of Tk::Scrollbar::ScrlTopBottom diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.bs b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.bs diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.dll b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.dll Binary files differnew file mode 100755 index 00000000000..e8caf25b628 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Scrollbar.dll diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Select.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Select.al new file mode 100644 index 00000000000..0da50da443b --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/Select.al @@ -0,0 +1,59 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 181 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\Select.al)" +# tkScrollSelect -- +# This procedure is invoked when button 1 is pressed over the scrollbar. +# It invokes one of several scrolling actions depending on where in +# the scrollbar the button was pressed. +# +# Arguments: +# w - The scrollbar widget. +# element - The element of the scrollbar that was selected, such +# as "arrow1" or "trough2". Shouldn't be "slider". +# repeat - Whether and how to auto-repeat the action: "noRepeat" +# means don't auto-repeat, "initial" means this is the +# first action in an auto-repeat sequence, and "again" +# means this is the second repetition or later. + +sub Select +{ + my $w = shift; + my $element = shift; + my $repeat = shift; + return unless defined ($element); + if ($element eq 'arrow1') + { + $w->ScrlByUnits('hv',-1); + } + elsif ($element eq 'trough1') + { + $w->ScrlByPages('hv',-1); + } + elsif ($element eq 'trough2') + { + $w->ScrlByPages('hv', 1); + } + elsif ($element eq 'arrow2') + { + $w->ScrlByUnits('hv', 1); + } + else + { + return; + } + + if ($repeat eq 'again') + { + $w->RepeatId($w->after($w->cget('-repeatinterval'),['Select',$w,$element,'again'])); + } + elsif ($repeat eq 'initial') + { + $w->RepeatId($w->after($w->cget('-repeatdelay'),['Select',$w,$element,'again'])); + } +} + +# end of Tk::Scrollbar::Select +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/StartDrag.al b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/StartDrag.al new file mode 100644 index 00000000000..32edbfdef24 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/StartDrag.al @@ -0,0 +1,38 @@ +# NOTE: Derived from ..\blib\lib\Tk\Scrollbar.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package Tk::Scrollbar; + +#line 232 "..\blib\lib\Tk\Scrollbar.pm (autosplit into ..\blib\lib\auto\Tk\Scrollbar\StartDrag.al)" +# tkScrollStartDrag -- +# This procedure is called to initiate a drag of the slider. It just +# remembers the starting position of the slider. +# +# Arguments: +# w - The scrollbar widget. +# x, y - The mouse position at the start of the drag operation. + +sub StartDrag +{ + my($w,$x,$y) = @_; + return unless (defined ($w->cget('-command'))); + $pressX = $x; + $pressY = $y; + @initValues = $w->get; + my $iv0 = $initValues[0]; + if (@initValues == 2) + { + $initPos = $iv0; + } + elsif ($iv0 == 0) + { + $initPos = 0; + } + else + { + $initPos = $initValues[2]/$initValues[0]; + } +} + +# end of Tk::Scrollbar::StartDrag +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/autosplit.ix b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/autosplit.ix new file mode 100644 index 00000000000..293d1322dd4 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Scrollbar/autosplit.ix @@ -0,0 +1,30 @@ +# Index created by AutoSplit for ..\blib\lib\Tk\Scrollbar.pm +# (file acts as timestamp) +package Tk::Scrollbar; +sub Enter +; +sub Leave +; +sub Motion +; +sub ButtonDown +; +sub ButtonUp +; +sub Select +; +sub StartDrag +; +sub Drag +; +sub EndDrag +; +sub ScrlByUnits +; +sub ScrlByPages +; +sub ScrlToPos +; +sub ScrlTopBottom +; +1; diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.bs b/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.bs new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.bs diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.dll b/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.dll Binary files differnew file mode 100755 index 00000000000..2b0235a8221 --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Text/Text.dll diff --git a/Master/tlpkg/installer/perllib/auto/Tk/Text/autosplit.ix b/Master/tlpkg/installer/perllib/auto/Tk/Text/autosplit.ix new file mode 100644 index 00000000000..48a5455c34a --- /dev/null +++ b/Master/tlpkg/installer/perllib/auto/Tk/Text/autosplit.ix @@ -0,0 +1,3 @@ +# Index created by AutoSplit for ..\blib\lib\Tk\Text.pm +# (file acts as timestamp) +1; diff --git a/Master/tlpkg/installer/perllib/subs.pm b/Master/tlpkg/installer/perllib/subs.pm new file mode 100644 index 00000000000..e5a9aa8827d --- /dev/null +++ b/Master/tlpkg/installer/perllib/subs.pm @@ -0,0 +1,40 @@ +package subs; + +our $VERSION = '1.00'; + +=head1 NAME + +subs - Perl pragma to predeclare sub names + +=head1 SYNOPSIS + + use subs qw(frob); + frob 3..10; + +=head1 DESCRIPTION + +This will predeclare all the subroutine whose names are +in the list, allowing you to use them without parentheses +even before they're declared. + +Unlike pragmas that affect the C<$^H> hints variable, the C<use vars> and +C<use subs> declarations are not BLOCK-scoped. They are thus effective +for the entire file in which they appear. You may not rescind such +declarations with C<no vars> or C<no subs>. + +See L<perlmodlib/Pragmatic Modules> and L<strict/strict subs>. + +=cut + +require 5.000; + +sub import { + my $callpack = caller; + my $pack = shift; + my @imports = @_; + foreach $sym (@imports) { + *{"${callpack}::$sym"} = \&{"${callpack}::$sym"}; + } +}; + +1; |