~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/tools/winapi/output.pm

Version: ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 #
  2 # Copyright 1999, 2000, 2001 Patrik Stridvall
  3 #
  4 # This library is free software; you can redistribute it and/or
  5 # modify it under the terms of the GNU Lesser General Public
  6 # License as published by the Free Software Foundation; either
  7 # version 2.1 of the License, or (at your option) any later version.
  8 #
  9 # This library is distributed in the hope that it will be useful,
 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 12 # Lesser General Public License for more details.
 13 #
 14 # You should have received a copy of the GNU Lesser General Public
 15 # License along with this library; if not, write to the Free Software
 16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 17 #
 18 
 19 package output;
 20 
 21 use strict;
 22 
 23 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
 24 require Exporter;
 25 
 26 @ISA = qw(Exporter);
 27 @EXPORT = qw();
 28 @EXPORT_OK = qw($output);
 29 
 30 use vars qw($output);
 31 
 32 $output = '_output'->new;
 33 
 34 package _output;
 35 
 36 use strict;
 37 
 38 my $stdout_isatty = -t STDOUT;
 39 my $stderr_isatty = -t STDERR;
 40 
 41 sub new($) {
 42     my $proto = shift;
 43     my $class = ref($proto) || $proto;
 44     my $self  = {};
 45     bless ($self, $class);
 46 
 47     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
 48     my $progress = \${$self->{PROGRESS}};
 49     my $last_progress = \${$self->{LAST_PROGRESS}};
 50     my $last_time = \${$self->{LAST_TIME}};
 51     my $progress_count = \${$self->{PROGRESS_COUNT}};
 52     my $prefix = \${$self->{PREFIX}};
 53     my $prefix_callback = \${$self->{PREFIX_CALLBACK}};
 54 
 55     $$progress_enabled = 1;
 56     $$progress = "";
 57     $$last_progress = "";
 58     $$last_time = 0;
 59     $$progress_count = 0;
 60     $$prefix = undef;
 61     $$prefix_callback = undef;
 62 
 63     return $self;
 64 }
 65 
 66 sub DESTROY {
 67     my $self = shift;
 68 
 69     $self->hide_progress;
 70 }
 71 
 72 sub enable_progress($) {
 73     my $self = shift;
 74     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
 75 
 76     $$progress_enabled = 1;
 77 }
 78 
 79 sub disable_progress($) {
 80     my $self = shift;
 81     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
 82 
 83     $$progress_enabled = 0;
 84 }
 85 
 86 sub show_progress($) {
 87     my $self = shift;
 88     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
 89     my $progress = ${$self->{PROGRESS}};
 90     my $last_progress = \${$self->{LAST_PROGRESS}};
 91     my $progress_count = \${$self->{PROGRESS_COUNT}};
 92 
 93     $$progress_count++;
 94 
 95     if($$progress_enabled) {
 96         if($$progress_count > 0 && $$progress && $stderr_isatty) {
 97             # If progress has more than $columns characters the xterm will
 98             # scroll to the next line and our ^H characters will fail to
 99             # erase it.
100             my $columns=$ENV{COLUMNS} || 80;
101             $progress = substr $progress,0,($columns-1);
102             print STDERR $progress;
103             $$last_progress = $progress;
104         }
105     }
106 }
107 
108 sub hide_progress($)  {
109     my $self = shift;
110     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
111     my $progress = \${$self->{PROGRESS}};
112     my $last_progress = \${$self->{LAST_PROGRESS}};
113     my $progress_count = \${$self->{PROGRESS_COUNT}};
114 
115     $$progress_count--;
116 
117     if($$progress_enabled) {
118         if($$last_progress && $stderr_isatty) {
119             my $message=" " x length($$last_progress);
120             print STDERR $message;
121             undef $$last_progress;
122         }
123     }
124 }
125 
126 sub update_progress($) {
127     my $self = shift;
128     my $progress_enabled = \${$self->{PROGRESS_ENABLED}};
129     my $progress = ${$self->{PROGRESS}};
130     my $last_progress = \${$self->{LAST_PROGRESS}};
131 
132     if($$progress_enabled) {
133         # If progress has more than $columns characters the xterm will
134         # scroll to the next line and our ^H characters will fail to
135         # erase it.
136         my $columns=$ENV{COLUMNS} || 80;
137         $progress = substr $progress,0,($columns-1);
138 
139         my $prefix = "";
140         my $suffix = "";
141         if($$last_progress) {
142             $prefix = "" x length($$last_progress);
143 
144             my $diff = length($$last_progress)-length($progress);
145             if($diff > 0) {
146                 $suffix = (" " x $diff) . ("" x $diff);
147             }
148         }
149         print STDERR $prefix, $progress, $suffix;
150         $$last_progress = $progress;
151     }
152 }
153 
154 sub progress($$) {
155     my $self = shift;
156     my $progress = \${$self->{PROGRESS}};
157     my $last_time = \${$self->{LAST_TIME}};
158 
159     my $new_progress = shift;
160     if(defined($new_progress)) {
161         if(!defined($$progress) || $new_progress ne $$progress) {
162             $$progress = $new_progress;
163 
164             $self->update_progress;
165             $$last_time = 0;
166         }
167     } else {
168         return $$progress;
169     }
170 }
171 
172 sub lazy_progress($$) {
173     my $self = shift;
174     my $progress = \${$self->{PROGRESS}};
175     my $last_time = \${$self->{LAST_TIME}};
176 
177     $$progress = shift;
178 
179     my $time = time();
180     if($time - $$last_time > 0) {
181         $self->update_progress;
182         $$last_time = $time;
183     }
184 }
185 
186 sub prefix($$) {
187     my $self = shift;
188     my $prefix = \${$self->{PREFIX}};
189     my $prefix_callback = \${$self->{PREFIX_CALLBACK}};
190 
191     my $new_prefix = shift;
192     if(defined($new_prefix)) {
193         if(!defined($$prefix) || $new_prefix ne $$prefix) {
194             $$prefix = $new_prefix;
195             $$prefix_callback = undef;
196         }
197     } else {
198         return $$prefix;
199     }
200 }
201 
202 sub prefix_callback($) {
203     my $self = shift;
204 
205     my $prefix = \${$self->{PREFIX}};
206     my $prefix_callback = \${$self->{PREFIX_CALLBACK}};
207 
208     $$prefix = undef;
209     $$prefix_callback = shift;
210 }
211 
212 sub write($$) {
213     my $self = shift;
214 
215     my $message = shift;
216 
217     my $prefix = \${$self->{PREFIX}};
218     my $prefix_callback = \${$self->{PREFIX_CALLBACK}};
219 
220     $self->hide_progress if $stdout_isatty;
221     if(defined($$prefix)) {
222         print $$prefix . $message;
223     } elsif(defined($$prefix_callback)) {
224         print &{$$prefix_callback}() . $message;
225     } else {
226         print $message;
227     }
228     $self->show_progress if $stdout_isatty;
229 }
230 
231 1;

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.