package require TclCurl proc FtpMatch {pattern filename} { puts "Pattern: $pattern - File: $filename" # For this example everything matches return 0 } proc FtpCheck {remains} { global someVar # Lets forget about directories: if {($someVar(filetype) eq "directory") || ([regexp {^\.} $someVar(filename)])} { return 1 } puts -nonewline "File to download $someVar(filename) ($someVar(size)B) (y/N): " flush stdout set line [string tolower [gets stdin]] if {$line eq y} { return 0 } return 1 } proc FtpSaveFile {readData} { global outFile global openedFile global someVar if {$openedFile==0} { if {![file exists downloads]} { file mkdir downloads } set outFile [open "downloads/$someVar(filename)" w+] fconfigure $outFile -translation binary } puts -nonewline $outFile $readData return 0 } proc FtpDone {} { global outFile global openedFile puts "Done\n" close $outFile set openedFile 0 return 0 } set openedFile 0 set curlHandle [curl::init] $curlHandle configure -url ftp://sunsite.rediris.es/sites/metalab.unc.edu/ldp/* $curlHandle configure -chunkbgnproc FtpCheck $curlHandle configure -chunkbgnvar someVar $curlHandle configure -chunkendproc FtpDone $curlHandle configure -writeproc FtpSaveFile $curlHandle configure -wildcardmatch 1 $curlHandle configure -fnmatchproc FtpMatch $curlHandle perform $curlHandle cleanup