home *** CD-ROM | disk | FTP | other *** search
- #! /usr/local/bin/perl
- eval '(exit $?0)' && eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' & eval 'exec /usr/local/bin/perl -S $0 $argv:q'
- if 0;
- #end of perlstart
- # NOTE ON PERLSTART: ENSURE YOUR PERLPATH (/usr/.../perl) IS CORRECT FOR YOUR
- # SYSTEM.
- # SEE "EDIT THESE VALUES" BELOW.
-
- # Perl Program mftp Clay Luther January 1991
- # Send comments to cluther@supernet.haus.com
-
- # ABSTRACT:
- # Provide a simple interface to the mail ftp servers.
- #
- # DESCRIPTION:
- # mftp is a user interface to internet mail ftp services. Mail ftp services
- # work by having the user submit a file containing standard FTP commands to
- # a mail ftp server. The mail server performs the inet ftp connection to
- # the machine the user wants to ftp to and mails ftp output back to the
- # user.
- #
- # Mftp provides the user with a simple interface to a mail ftp server. From
- # unix, the user enters the command "mftp [site] [user] [passwd]". If he
- # does not enter "site", the mftp prompts him for one. "User" and "passwd"
- # default to "anonymous".
- #
- # Mftp then presents the user with a simple menu of commands. The user
- # enters a command by typing a letter followed by a carriage return. If
- # the command takes a parameter, the user may enter it on the same line as
- # the command letter; otherwise, mftp will prompt the user for the parameter.
- #
- # Mftp builds a file containing the user's ftp requests. Once the user is
- # finished entering commands, mftp mails the request file to the defined
- # mftp server (see variable $bitftp).
- #
- # If mftp encounters and error during execution, it dies with an appropriate
- # message.
-
-
- # mftp: a batched ftp program
- # USAGE: mftp [site] [user] [passwd]
-
- #####################
- # EDIT THESE VALUES #
- $tmp = "/tmp/mftp$$";
- $version = "mftp version 1.0";
- $mail = "/usr/lib/sendmail";
- $edit = "/usr/bin/vi";
- $more = "/usr/local/bin/less";
- $bitftp = "bitftp@pucc.princeton.edu";
- ######################################
-
-
- ($site,$user,$passwd) = @ARGV;
-
- if (!$site) {
- print "open: ";
- chop($site=<STDIN>);
- }
-
- $user = "anonymous" unless $user;
- $passwd = "anonymous" unless $passwd;
-
-
- print "\n\nWelcome to $version.\nConnect to ftp server $site.\nUser $user, password $passwd.\n";
-
- print "Batching commands to $tmp...\n";
- open(F,">$tmp") || die "Cannot open $tmp: $!\n";
- print F "FTP $site UUENCODE\n";
- print F "USER $user $passwd\n";
- close(F);
-
- $dir = "";
- $mode = "ASCII";
- $atleastone = 0;
- $help = 0;
-
- while (&quest) {
- if ($atleastone >= 5) { # Time to ship this baby...too many
- # output commands
- local($a);
- print "You have entered $atleastone output requests.\n";
- $atleastone = 0;
- print "Send the current requests and continue [y]? ";
- chop($a=<STDIN>);
- $a = "y" unless $a;
- if ($a =~ /y.*/i) {
- # append QUIT
- &frint("QUIT\n");
- # send request
- print "Mailing requests...\n";
- system("$mail $bitftp < $tmp");
- # reopen request batch
- system("rm -f $tmp");
- &frint("FTP $site UUENCODE\n");
- &frint("USER $user $passwd\n");
- }
- else {
- print "Quit mftp? ";
- chop($a=<STDIN>);
- if ($a =~ /y.*/i) {
- goto quitmftp;
- }
- }
- }
- } ;
-
- quitmftp:
-
- if ($atleastone) {
- local($req);
- if ($atleastone>1) { $req="s"; } else { $req=""; }
- print "$atleastone output request$req.\n";
- print "Sending the request to $bitftp...";
- system("$mail $bitftp < $tmp");
- print "\nYou should get a reply back within a day.\n";
- } else {
- print "Hmm...no commands entered. Not sending the request.\n";
- }
- system("rm -f $tmp");
-
- exit 0;
-
- ############## END OF MAIN ###############
-
- sub quest
- {
- local($c,$d);
- print "\nMode: $mode";
- if (length($dir)>0) {
- print "\tLast Chdir: $dir";
- }
- print "\n";
- if ($help) {
- print "A)scii B)inary C)hdir D)ir E)dit F)orget G)et H)elp Q)uit V)iew Z)ap\n";
- $help=0;
- }
- print "[abcdeghqvz?]: ";
- chop($c = <STDIN>);
- if ($c =~ /^ *a.*/i) {
- $mode = "ASCII";
- &frint("$mode\n");
- return 1;
- }
- elsif ($c =~ /^ *b.*/i) {
- $mode = "BINARY";
- &frint("$mode\n");
- return 1;
- }
- elsif ($c =~ /^ *c.*/i) {
- local(@P) = split(' ',$c);
- shift(@P);
- $c = join(' ',@P);
- if ($c) {
- $d = $c;
- } else {
- print "Chdir to: ";
- chop($d = <STDIN>);
- }
- $dir = $d;
- &frint("CD $d\n");
- return 1;
- }
- elsif ($c =~ /^ *d.*/i) {
- local(@P) = split(' ',$c);
- shift(@P);
- $c = join(' ',@P);
- if ($c) {
- $d = $c;
- } else {
- print "Dir of: ";
- chop($d = <STDIN>);
- }
- &frint("DIR $d\n");
- $atleastone++;
- return 1;
- }
- elsif ($c =~ /^ *e.*/i) {
- system("$edit $tmp");
- return 1;
- }
- elsif ($c =~ /^ *f.*/i) {
- $atleastone = 0;
- return 0;
- }
- elsif ($c =~ /^ *g.*/i) {
- local(@P) = split(' ',$c);
- shift(@P);
- $c = join(' ',@P);
- if ($c) {
- $d = $c;
- } else {
- print "Get file: ";
- chop($d = <STDIN>);
- }
- &frint("GET $d\n");
- $atleastone++;
- return 1;
- }
- elsif ($c =~ /^ *q.*/i) {
- &frint("QUIT\n");
- return 0;
- }
- elsif ($c =~ /^ *v.*/i) {
- system("$more $tmp");
- return 1;
- }
- elsif ($c =~ /^ *z.*/i) {
- system("rm -f $tmp");
- &frint("FTP $site UUENCODE\n");
- &frint("USER $user $passwd\n");
- $atleastone = 0;
- $mode = "ASCII";
- $dir = "";
- return 1;
- }
- elsif ($c =~ /^ *\?.*/) {
- $help = 1;
- return 1;
- }
- elsif ($c =~ /^ *h.*/i) { # print some screen help
- print "\n";
- print "A)scii Switch to ASCII file transfer mode.\n";
- print "B)inary Switch to BINARY file transfer mode.\n";
- print "C)hdir Change current directory.\n";
- print "D)ir List specified directory.\n";
- print "E)dit Edit current batch with $edit.\n";
- print "F)orget Abort this session.\n";
- print "G)et Get the specified file.\n";
- print "H)elp Show this.\n";
- print "Q)uit Stop batching and send the requests.\n";
- print "V)iew Show current batch with $more.\n";
- print "Z)ap Erase and restart current batch.\n";
- print "? Quick help.\n\n";
- return 1;
- }
- else {
- print "Unknown command: $c\n";
- return 1;
- }
- }
-
-
- sub frint
- {
- local($s) = @_;
- open(F,">>$tmp") || die "Cannot open $tmp: $!\n";
- print F $s;
- print " > " . $s;
- close(F);
- }
-