-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinput.c
More file actions
98 lines (79 loc) · 1.76 KB
/
input.c
File metadata and controls
98 lines (79 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "input.h"
#include "util.h"
#include "proc.h"
void handleinput(char * strptr, unsigned * stateptr, listptr historyptr)
{
/*** Clear former history errors ***/
HISTERROR_OFF
int cmdnum = 0;
/*** Find out if we need to do some history replacement ***/
/*** If we do, replace our string with the correct command ***/
if (strptr[0] == '!')
{
cmdnum = atoi(&strptr[NUMLOCATION]);
if (getcmd(cmdnum,historyptr))
{
/*** Get the command from history ***/
strncpy(strptr, getcmd(cmdnum,historyptr), MAXLINESIZE);
}
else
{
HISTERROR_ON
}
}
/*** Check the first argument for builtins ***/
if (!strncmp(strptr, "exit\n", EXIT) ||
!strncmp(strptr, "x\n", EX) ||
!strncmp(strptr, "logout\n", LOGOUT))
{
*stateptr |= QUIT;
BUILTIN_ON
}
else if (!strncmp(strptr, "myshell ", MYSHELL) && NO_HISTERROR)
{
/*** Skip over the builtin part of the input string ***/
strptr += MYSHELL;
system(strptr);
/*** Now come back to it ***/
strptr -= MYSHELL;
BUILTIN_ON
}
else if (!strncmp(strptr, "chdir ", CHDIR) && NO_HISTERROR)
{
chomp(strptr);
/*** Skip over the builtin part of the input string ***/
strptr += CHDIR;
if(chdir(strptr) == -1)
{
perror("chdir error");
}
/*** Now come back to it ***/
strptr -= CHDIR;
BUILTIN_ON
}
else if (!strncmp(strptr, "cd ", CD) && NO_HISTERROR)
{
chomp(strptr);
/*** Skip over the builtin part of the input string ***/
strptr += CD;
if(chdir(strptr) == -1)
{
perror("cd error");
}
/*** Now come back to it ***/
strptr -= CD;
BUILTIN_ON
}
else if (!strncmp(strptr, "history", HISTORY))
{
printstrings(historyptr);
BUILTIN_ON
}
else if (NO_HISTERROR)
{
havechildren(strptr,stateptr);
BUILTIN_OFF
}
else
perror("History out of range");
}