sub savefile { # Determine which save routine to use and then use it my ( $textwindow, $top ) = ( $::textwindow, $::top ); ::hidepagenums(); my $filename = $::lglobal{global_filename}; if ( $filename =~ /No File Loaded/ ) { unless ( ::isedited() ) { return; } my ($name); $name = $textwindow->getSaveFile( -title => 'Save As', -initialdir => $::globallastpath ); if ( defined($name) and length($name) ) { $textwindow->SaveUTF($name); $name = ::os_normal($name); ::_recentupdate($name); } else { return; } } else { my $ans = !fileisreadonly($filename) || 'Yes' eq $top->messageBox( -icon => 'warning', -title => 'Confirm save?', -type => 'YesNo', -default => 'no', -message => "File $filename is write-protected. Remove write-protection and save anyway?", ); return unless $ans; $::top->Busy( -recurse => 1 ); if ($::autobackup) { if ( -e $filename ) { if ( -e "$filename.bk2" ) { unlink "$filename.bk2"; } if ( -e "$filename.bk1" ) { rename( "$filename.bk1", "$filename.bk2" ); } rename( $filename, "$filename.bk1" ); } } $textwindow->SaveUTF; $::top->Unbusy( -recurse => 1 ); } $textwindow->ResetUndo; #necessary to reset edited flag ::_bin_save(); ::setedited(0); ::set_autosave() if $::autosave; ::update_indicators(); } sub fileisreadonly { my $name = shift; my $mode = (stat($name))[2]; return 0 if ( $mode & 0200 ); return 1; }