home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Club Amiga de Montreal - CAM
/
CAM_CD_1.iso
/
files
/
074.lha
/
CShell
/
Sources
/
main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-11-20
|
3KB
|
151 lines
/*
* MAIN.C
*
* Matthew Dillon, 24 Feb 1986
* (c)1986 Matthew Dillon 9 October 1986
*
* Version 2.07M by Steve Drew 10-Sep-87
*
*/
#include "shell.h"
int aux; /* for use with aux: driver */
char Inline[260];
main(argc, argv)
register char *argv[];
{
#if RAW_CONSOLE
char *rawgets();
#endif
char *prompt;
register int i;
extern int Enable_Abort;
init_vars();
init();
seterr();
do_pwd(NULL); /* set $_cwd */
Enable_Abort = 0;
for (i = 1; i < argc; ++i) {
if (argv[i][0] == '-' && argv[i][1] == 'c') {
Inline[0] = ' ';
Inline[1] = '\000';
while (++i < argc) {
strcat(Inline,argv[i]);
strcat(Inline," ");
}
exec_command(Inline);
main_exit(Lastresult);
}
if (argv[i][0] == '-' && argv[i][1] == 'a') {
aux = 1;
continue;
}
strcpy (Inline, "source ");
strcat (Inline, argv[i]);
av[1] = argv[i];
do_source (Inline);
}
for (;;) {
if ((prompt = get_var (LEVEL_SET, V_PROMPT)) == NULL)
prompt = "$ ";
if (disable)
prompt = "_ ";
if (breakcheck()) {
while (WaitForChar(Input(), 100L) || stdin->_bp < stdin->_bend)
gets(Inline);
}
clearerr(stdin); /* prevent acidental quit */
#if RAW_CONSOLE
if (Quit || !rawgets(Inline, prompt))
#else
printf("%s",prompt);
fflush(stdout);
if (Quit || !gets(Inline))
#endif
main_exit(0);
breakreset();
if (*Inline)
exec_command(Inline);
}
}
init_vars()
{
if (IsInteractive(Input()))
set_var (LEVEL_SET, V_PROMPT, "$ ");
else
set_var (LEVEL_SET, V_PROMPT, "");
set_var (LEVEL_SET, V_HIST, "20");
set_var (LEVEL_SET, V_LASTERR, "0");
set_var (LEVEL_SET, V_PATH, "ram:,ram:c/,c:,df1:c/,df0:c/");
set_var (LEVEL_SET, "_insert", "1");
}
init()
{
static char pipe1[32], pipe2[32];
stdin->_flags |= 0x80; /* make sure we're set as a tty */
stdout->_flags |= 0x80; /* incase of redirection in .login */
#if RAW_CONSOLE
printf("\23312{"); /* enable window resize reports */
#endif
Close(_devtab[2].fd);
_devtab[2].mode |= O_STDIO;
_devtab[2].fd = _devtab[1].fd; /* set stderr to Output() otherwise */
/* don't work with aux driver */
Myprocess = (struct Process *)FindTask(0L);
Uniq = (long)Myprocess;
Pipe1 = pipe1;
Pipe2 = pipe2;
sprintf (pipe1, "ram:pipe1_%ld", Uniq);
sprintf (pipe2, "ram:pipe2_%ld", Uniq);
}
main_exit(n)
{
exit (n);
}
breakcheck()
{
return (int)(SetSignal(0L,0L) & SIGBREAKF_CTRL_C);
}
breakreset()
{
SetSignal(0L, SIGBREAKF_CTRL_C);
}
dobreak()
{
if (breakcheck()) {
printf("^C\n");
return(1);
}
return(0);
}
/* this routine causes manx to use this Chk_Abort() rather than it's own */
/* otherwise it resets our ^C when doing any I/O (even when Enable_Abort */
/* is zero). Since we want to check for our own ^C's */
Chk_Abort()
{
return(0);
}
_wb_parse()
{
}