home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
unix
/
volume17
/
e2
/
part03
/
e.c
< prev
next >
Wrap
C/C++ Source or Header
|
1989-02-08
|
6KB
|
205 lines
#include "e.h"
void
e(c, v)
int c;
char **v;
{
/*
* Process the command line. This gets a little messy as there are so
* many ways e can be invoked. They are listed below and there is an
* example provided in each of the switch cases to illustrate the
* particular one we are trying to handle.
*
* The idea in most cases is to get the arguments that will be passed
* to vi into a character array (arg), and pass it to do_vi(). do_vi()
* splits up the arguments and execs vi. Occasionally it is simpler and
* do_vi() can be called more directly.
*
*
* Command Line Options.
* =====================
*
* No arguments.
*
* (1) "e"
*
* One argument.
*
* (2) "e -"
* (3) "e -#" # is the number of some history item.
* (4) "e -r"
* (5) "e -pat" pat is a search pattern.
* (6) "e +100"
* (7) "e ."
* (8) "e <filename > "
*
* Multiple arguments.
*
* (9) "e fred harry joe" Also handles "e -t tag", "e -r file" etc.
*
*/
switch (c){
case 1: {
/*
* Command line option (1).
* Example: "e"
*
* Just go and vi the last file that was e'ed.
*
*/
check_hist();
abandon();
do_vi(hist[hist_count - 1]);
break;
}
case 2:{
switch ((*++v)[0]){
case '-':{
if ((c = (*v)[1]) == '\0'){
/*
* Command line option (2).
* Example: "e -"
*
* This is a select from history, ask what they want.
*
*/
check_hist();
ask_hist();
do_vi(arg);
}
else if (isdigit(c)){
/*
* Command line option (3).
* Example: "e -3"
*
* Get the nth last file from the history and vi it.
*
*/
check_hist();
nth_hist(c-'0');
do_vi(arg);
}
else if (c == 'r' && (*v)[2] == '\0'){
/*
* Command line option (4).
* Example: "e -r"
*
* A recover, just pass it to vi and don't interfere.
*
*/
do_vi(*v);
}
else{
/*
* Command line option (5).
* Example: "e -pat"
*
* This is a pattern - try to match it.
*
*/
check_hist();
find_match(++*v);
do_vi(arg);
}
break;
}
case '+':{
/*
* Command line option (6).
* Example: "e +100"
*
* A command, put it before the last file name.
*
*/
check_hist();
insert_cmd(*v);
do_vi(arg);
break;
}
case '.':{
/*
* Command line option (7).
* Example: "e ."
* Example: "e .login" (falls through to option (8)).
*
* Just give a history list if there is only a dot.
* Otherwise fall through as it must be a filename.
*
*/
if ((*v)[1] == '\0'){
register i;
check_hist();
for (i = 0; i < hist_count; i++){
ok_fprintf(stderr, "\t[%d]: %s\n",
hist_count - i - 1, hist[i]);
}
abandon();
}
/*
* The switch falls through in the case where there is a
* filename that starts with a period.
*
*/
}
/* FALLTHROUGH */
default :{
/*
* Command line option (8).
* Example: "e fred"
* Example: "e .login" (fell through from option (8)).
*
* Looks like it's just a plain old file name. vi it!
*
*/
normal(*v);
do_vi(arg);
break;
}
}
break;
}
default:{
/*
* Command line option (9).
* Example: "e fred harry joe"
*
* A bunch of arguments, fix the history & vi them all as normal.
*
*/
multiple(c, v, ARG_CHARS);
do_vi(arg);
break;
}
}
}