More UNIX-like LS in FTP
Root Boy Jim
rbj at icst-cmr.ARPA
Tue Jul 29 11:58:53 AEST 1986
I have modified the BSD4.2 FTP client to do the `ls' & `dir' commands
in a more UNIX-like manner. As currently distributed, you only get
ONE remote file name argument, with the second taken to be the name of
the local listing file. Thus, `ls foo bar' is taken to mean `ls foo > bar'.
This lets you pick between options or a file name, but not both. When
talking to a UNIX server, it would be nice to have the -FAC options by
default. My changes are as follows:
1) Added the `unix' command. Talks to a UNIX server more
intelligently by adding `-FAC' to all `ls' commands,
and `-FAs' to all `dir' commands.
2) Added recursive versions of the `ls' and `dir' commands,
called `lr' and `dr' respectively. Options added are
`-FACR' and `-FAsR' likewise.
3) I didn't do anything with `mls' & `mdir' as they appear
to work strangely and I never use them anyway.
4) This is my first sources posting so I'm not exactly sure
how to combine shars and patches into one nifty string
you can pipe to. So, it's a two step process, first
unshar it, then apply the patches, which are diff -c's.
(Root Boy) Jim Cottrell <rbj at icst-cmr.arpa>
I request a weekend in Havana with Phil Silvers!
#! /bin/sh
# Yow! This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Only a Pinhead would execute the file with /bin/csh (not sh) to create:
# cmds.c.diff
# cmdtab.c.diff
# ftp_var.h.diff
# This archive created: Mon Jul 28 21:01:43 1986
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'cmds.c.diff'
then
echo shar: "Zippy will not over-write existing file 'cmds.c.diff'"
else
sed 's/^YOW!//' << \ZIPPY-THE-PINHEAD > 'cmds.c.diff'
YOW!*** /usr/src/ucb/ftp/cmds.c Wed Jul 27 00:34:47 1983
YOW!--- cmds.c Mon Jul 28 20:54:00 1986
YOW!***************
YOW!*** 405,411
YOW! printf("Not connected.\n");
YOW! printf("Mode: %s; Type: %s; Form: %s; Structure: %s\n",
YOW! modename, typename, formname, structname);
YOW!! printf("Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s\n",
YOW! onoff(verbose), onoff(bell), onoff(interactive),
YOW! onoff(doglob));
YOW! printf("Hash mark printing: %s; Use of PORT cmds: %s\n",
YOW!
YOW!--- 405,411 -----
YOW! printf("Not connected.\n");
YOW! printf("Mode: %s; Type: %s; Form: %s; Structure: %s\n",
YOW! modename, typename, formname, structname);
YOW!! printf("Verbose: %s; Bell: %s; Prompt: %s; Glob: %s; UNIX: %s\n",/*RBJ*/
YOW! onoff(verbose), onoff(bell), onoff(interactive),
YOW! onoff(doglob), onoff(udir)); /*RBJ*/
YOW! printf("Hash mark printing: %s; Use of PORT cmds: %s\n",
YOW!***************
YOW!*** 407,413
YOW! modename, typename, formname, structname);
YOW! printf("Verbose: %s; Bell: %s; Prompting: %s; Globbing: %s\n",
YOW! onoff(verbose), onoff(bell), onoff(interactive),
YOW!! onoff(doglob));
YOW! printf("Hash mark printing: %s; Use of PORT cmds: %s\n",
YOW! onoff(hash), onoff(sendport));
YOW! }
YOW!
YOW!--- 407,413 -----
YOW! modename, typename, formname, structname);
YOW! printf("Verbose: %s; Bell: %s; Prompt: %s; Glob: %s; UNIX: %s\n",/*RBJ*/
YOW! onoff(verbose), onoff(bell), onoff(interactive),
YOW!! onoff(doglob), onoff(udir)); /*RBJ*/
YOW! printf("Hash mark printing: %s; Use of PORT cmds: %s\n",
YOW! onoff(hash), onoff(sendport));
YOW! }
YOW!***************
YOW!*** 423,428
YOW! printf("Bell mode %s.\n", onoff(bell));
YOW! }
YOW!
YOW! /*
YOW! * Turn on packet tracing.
YOW! */
YOW!
YOW!--- 423,437 -----
YOW! printf("Bell mode %s.\n", onoff(bell));
YOW! }
YOW!
YOW!+ /* /*RBJ*/
YOW!+ /* Set UNIX directory mode. /*RBJ*/
YOW!+ /* /*RBJ*/
YOW!+ setunix() /*RBJ*/
YOW!+ { /*RBJ*/
YOW!+ udir = !udir; /*RBJ*/
YOW!+ printf("Unix mode %s.\n", onoff(udir)); /*RBJ*/
YOW!+ } /*RBJ*/
YOW!+
YOW! /*
YOW! * Turn on packet tracing.
YOW! */
YOW!***************
YOW!*** 665,671
YOW! printf("usage: %s remote-directory local-file\n", argv[0]);
YOW! return;
YOW! }
YOW!! cmd = argv[0][0] == 'l' ? "NLST" : "LIST";
YOW! if (strcmp(argv[2], "-") && !globulize(&argv[2]))
YOW! return;
YOW! recvrequest(cmd, argv[2], argv[1], "w");
YOW!
YOW!--- 674,687 -----
YOW! printf("usage: %s remote-directory local-file\n", argv[0]);
YOW! return;
YOW! }
YOW!! /*FTP cmd = argv[0][0] == 'l' ? "NLST" : "LIST"; /*RBJ*/
YOW!! argv[0][0] += argv[0][1] == 'r'; /* Yow! Am I HACKING yet? */ /*RBJ*/
YOW!! switch (argv[0][0]) { /*RBJ*/
YOW!! case 'l': cmd = udir ? "NLST -FAC" : "NLST"; break; /*RBJ*/
YOW!! case 'm': cmd = udir ? "NLST -FACR" : "NLST -R"; break; /*RBJ*/
YOW!! case 'd': cmd = udir ? "LIST -FAs" : "LIST"; break; /*RBJ*/
YOW!! case 'e': cmd = udir ? "LIST -FAsR" : "LIST -R"; break; /*RBJ*/
YOW!! } /*RBJ*/
YOW! if (strcmp(argv[2], "-") && !globulize(&argv[2]))
YOW! return;
YOW! recvrequest(cmd, argv[2], argv[1], "w");
ZIPPY-THE-PINHEAD
if test 2890 -ne "`wc -c < 'cmds.c.diff'`"
then
echo shar: "YOW! error transmitting 'cmds.c.diff'" '(should have been 2890 characters)'
fi
fi
if test -f 'cmdtab.c.diff'
then
echo shar: "Zippy will not over-write existing file 'cmdtab.c.diff'"
else
sed 's/^YOW!//' << \ZIPPY-THE-PINHEAD > 'cmdtab.c.diff'
YOW!*** /usr/src/ucb/ftp/cmdtab.c Wed Jul 27 00:34:47 1983
YOW!--- cmdtab.c Mon Jul 28 20:14:46 1986
YOW!***************
YOW!*** 17,22
YOW! int quit(), renamefile(), status();
YOW! int quote(), rmthelp(), shell();
YOW! int pwd(), makedir(), removedir();
YOW!
YOW! char appendhelp[] = "append to a file";
YOW! char asciihelp[] = "set ascii transfer type";
YOW!
YOW!--- 17,23 -----
YOW! int quit(), renamefile(), status();
YOW! int quote(), rmthelp(), shell();
YOW! int pwd(), makedir(), removedir();
YOW!+ int setunix(); /*RBJ*/
YOW!
YOW! char appendhelp[] = "append to a file";
YOW! char asciihelp[] = "set ascii transfer type";
YOW!***************
YOW!*** 26,31
YOW! char connecthelp[] = "connect to remote tftp";
YOW! char deletehelp[] = "delete remote file";
YOW! char debughelp[] = "toggle/set debugging mode";
YOW! char dirhelp[] = "list contents of remote directory";
YOW! char disconhelp[] = "terminate ftp session";
YOW! char formhelp[] = "set file transfer format";
YOW!
YOW!--- 27,33 -----
YOW! char connecthelp[] = "connect to remote tftp";
YOW! char deletehelp[] = "delete remote file";
YOW! char debughelp[] = "toggle/set debugging mode";
YOW!+ char drhelp[] = "list RECURSIVELY remote directory"; /*RBJ*/
YOW! char dirhelp[] = "list contents of remote directory";
YOW! char disconhelp[] = "terminate ftp session";
YOW! char formhelp[] = "set file transfer format";
YOW!***************
YOW!*** 33,38
YOW! char hashhelp[] = "toggle printing `#' for each buffer transferred";
YOW! char helphelp[] = "print local help information";
YOW! char lcdhelp[] = "change local working directory";
YOW! char lshelp[] = "nlist contents of remote directory";
YOW! char mdeletehelp[] = "delete multiple files";
YOW! char mdirhelp[] = "list contents of multiple remote directories";
YOW!
YOW!--- 35,41 -----
YOW! char hashhelp[] = "toggle printing `#' for each buffer transferred";
YOW! char helphelp[] = "print local help information";
YOW! char lcdhelp[] = "change local working directory";
YOW!+ char lrhelp[] = "nlist RECURSIVELY remote directory"; /*RBJ*/
YOW! char lshelp[] = "nlist contents of remote directory";
YOW! char mdeletehelp[] = "delete multiple files";
YOW! char mdirhelp[] = "list contents of multiple remote directories";
YOW!***************
YOW!*** 57,62
YOW! char tenexhelp[] = "set tenex file transfer type";
YOW! char tracehelp[] = "toggle packet tracing";
YOW! char typehelp[] = "set file transfer type";
YOW! char userhelp[] = "send new user information";
YOW! char verbosehelp[] = "toggle verbose mode";
YOW!
YOW!
YOW!--- 60,66 -----
YOW! char tenexhelp[] = "set tenex file transfer type";
YOW! char tracehelp[] = "toggle packet tracing";
YOW! char typehelp[] = "set file transfer type";
YOW!+ char unixhelp[] = "toggle UNIX directory mode"; /*RBJ*/
YOW! char userhelp[] = "send new user information";
YOW! char verbosehelp[] = "toggle verbose mode";
YOW!
YOW!***************
YOW!*** 71,76
YOW! { "close", disconhelp, 0, 1, disconnect },
YOW! { "delete", deletehelp, 0, 1, delete },
YOW! { "debug", debughelp, 0, 0, setdebug },
YOW! { "dir", dirhelp, 1, 1, ls },
YOW! { "form", formhelp, 0, 1, setform },
YOW! { "get", receivehelp, 1, 1, get },
YOW!
YOW!--- 75,81 -----
YOW! { "close", disconhelp, 0, 1, disconnect },
YOW! { "delete", deletehelp, 0, 1, delete },
YOW! { "debug", debughelp, 0, 0, setdebug },
YOW!+ { "dr", drhelp, 1, 1, ls }, /*RBJ*/
YOW! { "dir", dirhelp, 1, 1, ls },
YOW! { "form", formhelp, 0, 1, setform },
YOW! { "get", receivehelp, 1, 1, get },
YOW!***************
YOW!*** 78,83
YOW! { "hash", hashhelp, 0, 0, sethash },
YOW! { "help", helphelp, 0, 0, help },
YOW! { "lcd", lcdhelp, 0, 0, lcd },
YOW! { "ls", lshelp, 1, 1, ls },
YOW! { "mdelete", mdeletehelp, 1, 1, mdelete },
YOW! { "mdir", mdirhelp, 1, 1, mls },
YOW!
YOW!--- 83,89 -----
YOW! { "hash", hashhelp, 0, 0, sethash },
YOW! { "help", helphelp, 0, 0, help },
YOW! { "lcd", lcdhelp, 0, 0, lcd },
YOW!+ { "lr", lrhelp, 1, 1, ls }, /*RBJ*/
YOW! { "ls", lshelp, 1, 1, ls },
YOW! { "mdelete", mdeletehelp, 1, 1, mdelete },
YOW! { "mdir", mdirhelp, 1, 1, mls },
YOW!***************
YOW!*** 103,108
YOW! { "tenex", tenexhelp, 0, 1, settenex },
YOW! { "trace", tracehelp, 0, 0, settrace },
YOW! { "type", typehelp, 0, 1, settype },
YOW! { "user", userhelp, 0, 1, user },
YOW! { "verbose", verbosehelp, 0, 0, setverbose },
YOW! { "?", helphelp, 0, 0, help },
YOW!
YOW!--- 109,115 -----
YOW! { "tenex", tenexhelp, 0, 1, settenex },
YOW! { "trace", tracehelp, 0, 0, settrace },
YOW! { "type", typehelp, 0, 1, settype },
YOW!+ { "unix", unixhelp, 0, 0, setunix }, /*RBJ*/
YOW! { "user", userhelp, 0, 1, user },
YOW! { "verbose", verbosehelp, 0, 0, setverbose },
YOW! { "?", helphelp, 0, 0, help },
ZIPPY-THE-PINHEAD
if test 4358 -ne "`wc -c < 'cmdtab.c.diff'`"
then
echo shar: "YOW! error transmitting 'cmdtab.c.diff'" '(should have been 4358 characters)'
fi
fi
if test -f 'ftp_var.h.diff'
then
echo shar: "Zippy will not over-write existing file 'ftp_var.h.diff'"
else
sed 's/^YOW!//' << \ZIPPY-THE-PINHEAD > 'ftp_var.h.diff'
YOW!*** /usr/src/ucb/ftp/ftp_var.h Wed Jul 27 00:34:48 1983
YOW!--- ftp_var.h Mon Jul 28 20:05:28 1986
YOW!***************
YOW!*** 16,21
YOW! int interactive; /* interactively prompt on m* cmds */
YOW! int debug; /* debugging level */
YOW! int bell; /* ring bell on cmd completion */
YOW! int doglob; /* glob local file names */
YOW! int autologin; /* establish user account on connection */
YOW!
YOW!
YOW!--- 16,22 -----
YOW! int interactive; /* interactively prompt on m* cmds */
YOW! int debug; /* debugging level */
YOW! int bell; /* ring bell on cmd completion */
YOW!+ int udir; /* UNIX directory mode */ /*RBJ*/
YOW! int doglob; /* glob local file names */
YOW! int autologin; /* establish user account on connection */
YOW!
ZIPPY-THE-PINHEAD
if test 689 -ne "`wc -c < 'ftp_var.h.diff'`"
then
echo shar: "YOW! error transmitting 'ftp_var.h.diff'" '(should have been 689 characters)'
fi
fi
exit 0
# End of shell archive
More information about the Comp.sources.unix
mailing list