Hello all

I can't get my script to work with the gui windows, when the gui sub
routine gets called and the windows gets created, the program freezes and
script does not continue

I have not done win32::Gui programming before so your help is always
appreciated.

See the script attached.

Thankyou

Jeremy

use Win32::GUI;
use Win32::API;
use Net::FTP;
use Cwd;



#@ARGV = file,                                                  0 
#                               mode (send/recieve),1 
#                               mode (ascii/binary),2 
#                               ftphost,            3
#                               user,               4
#                               pass,               5
#                               port,               6
#                               passive (y/n)       7
#       CWD                 8
#
#
#

#if (@ARGV) {
TransferSetup();
#}else {
#       print "***Error: Not a StandAlone program\n"; 
#       sleep 1;
#}


sub TransferSetup() {
        my $file = 'Killing Heidi - Mascara.mp3'; # the file to recieve
        my $SendRecieveMode = 'recieve'; # which way is the transfer
        my $TransferMode = 'asc'; # binary or ascii
        my $FtpHost = 'jeremy'; # hostname
        my $UserName = 'jeremy'; #user
        my $Pass = 'portbriefcase'; #pass
        my $Port = '21'; #port
        my $Passive = '0'; # 0 for nonpassive, 1 for passive
        my $CWD = 'D:\backup\perl stuff\perltidy-20010304\perltidy-20010304\\';
        
                 $ftp = Net::FTP->new($FtpHost, Timeout => 60) || die;
                 $ftp->login("$UserName","$Pass") || die;
                 $ftp->port($Port);
                 
                 if ( $TransferMode eq "bin" ) {
                        $ftp->type(binary());           
                 }
                 
                 if ($SendRecieveMode eq "recieve") {
                                &RecieveTransfer($file,$CWD,$TransferMode);
                        }
                        else {
                                die;
                        }
                 
}


sub RecieveTransfer {
    my $RemoteFile = $_[0];
    print "$RemoteFile\n";
    my $buffer='';
    my $size = $ftp->size('/$RemoteFile');
    CreateProgressWin();
    Win32::GUI::DoEvents();
    my $blksize = 10240;
    my $track = 0;
    my $pos = 0;
    my $CurrentLocalDir = $_[1];
    my $TransferMode = $_[2]; 
    $blksize = 6240 if ( $size >= 300000 );
    $TransferBox->Status->Text("Retrieving $RemoteFile...");
    $TransferBox->TransferProgressBar_1->SetRange(0, 100);
    $TransferBox->TransferProgressBar_1->SetPos(0);
    $TransferBox->Size->Text("$track bytes of $size bytes received");
    $TransferBox->Progress->Text(int($pos)."%");
    $TransferBox->Show();
    if ( TransferMode eq 'asc' ) {
        if (!open ( FILE, "> $CurrentLocalDir"."/".$RemoteFile )) {
            Msg_Box("Can't create a file to put the data for $RemoteFile: 
$!.",48,"Can't Create File");
            return 0;
        }
    } else {
        if (!open ( FILE, "> $CurrentLocalDir"."/".$RemoteFile )) {
            Msg_Box("Can't create a file to put the data for $RemoteFile: 
$!.",48,"Can't Create File");
            return 0;
        }
        binmode FILE;
    }
    #ResetTimer();
    if (! ($data = $ftp->retr($RemoteFile)) ) {
        Msg_Box("Can't open a data retrieval socket for $RemoteFile.",48,"Can't Open 
Socket");
        return 0;
    }
    while(1) {
        Win32::GUI::DoEvents();
        $TransferBox->Size->Text("$track bytes of $size bytes received");
        $percent = $track/$size;
        $pos = 100*$percent;
        $TransferBox->Progress->Text(int($pos)."%");
        $TransferBox->TransferProgressBar_1->SetPos($pos);
        Win32::GUI::DoEvents();
        last unless $len = $data->read($buffer,$blksize);
        $track += $len;
        my $written = syswrite(FILE, $buffer, $len);
        unless(defined($written) && $written == $len) {
            Msg_Box("Cannot write to local file $CurrentLocalDir.\\.$RemoteFile: 
$!",48,"Can't Write To File");
            $data->abort;
            $TransferBox->Hide();
            close(FILE);
            return undef;
        }
    }
    $TransferBox->Hide();
    Win32::GUI::DoEvents();
    close(FILE);
    $data->close(); # implied $ftp->response
    return -1;
}


sub Msg_Box ($$$) {
    my ($msg, $buttons, $title) = (shift, shift, shift);
    return Win32::MsgBox($msg, $buttons, $title);
}


sub CreateProgressWin {
$TransferBox = new Win32::GUI::Window(
      -left   => 670,
      -top    => 264,
      -width  => 392,
      -height => 141,
      -name   => "TransferBox",
      -text   => "File Transfer"
      );

$TransferBox->Show();

$TransferBox->AddProgressBar(
       -text    => "Transfer Progress",
       -name    => "TransferProgressBar_1",
       -left    => 13,
       -top     => 53,
       -width   => 356,
       -height  => 12,
      );

$TransferBox->AddButton(
       -text    => "",
       -name    => "GroupBox_1",
       -left    => 3,
       -top     => 3,
       -width   => 375,
       -height  => 87,
       -style  => WS_CHILD | WS_VISIBLE | 7,  # GroupBox
      );

$TransferBox->AddButton(
       -text    => "Kill",
       -name    => "Cancel",
       -left    => 352,
       -top     => 93,
       -width   => 29,
       -height  => 21,
       -foreground    => 16744448,
      );

$TransferBox->AddLabel(
       -text    => "File :",
       -name    => "Label_1",
       -left    => 10,
       -top     => 13,
       -width   => 200,
       -height  => 13,
       -foreground    => 0,
      );

$TransferBox->AddLabel(
       -text    => "Size (Bytes):",
       -name    => "Size",
       -left    => 11,
       -top     => 31,
       -width   => 200,
       -height  => 13,
       -foreground    => 0,
      );

$TransferBox->AddLabel(
       -text    => "Progress (%) :",
       -name    => "Progress",
       -left    => 166,
       -top     => 70,
       -width   => 89,
       -height  => 13,
       -foreground    => 0,
      );

#$TransferBox->AddStatusBar(
#       -text    => "Transfer Status:",
#       -name    => "StatusBar_1",
#       -left    => 0,
#       -top     => 799,
#       -width   => 1150,
#       -height  => 17,
#      );

$TransferBox->AddButton(
       -text    => "",
       -name    => "transferStatus",
       -left    => 5,
       -top     => 88,
       -width   => 339,
       -height  => 24,
       -style  => WS_CHILD | WS_VISIBLE | 7,  # GroupBox
      );

$TransferBox->AddLabel(
       -text    => "Transfer Status :",
       -name    => "Status",
       -left    => 11,
       -top     => 96,
       -width   => 150,
       -height  => 13,
       -foreground    => 0,
      );

Win32::GUI::Dialog();

}

Win32::GUI::Dialog();
sub MainWindow_Terminate {
    return -1;
}

sub Cancel_Click {
        return -1;
        exit;
}


Reply via email to