-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuilt-ins.c
134 lines (124 loc) · 2.82 KB
/
built-ins.c
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include "shell.h"
/**
* check_syntax - checks if the command separator syntax is correct.
* @buffer: buffer to check.
* Return: 0 if the syntax is correct, -1 if the line contains a syntax error.
*/
int check_syntax(char *buffer)
{
int flag = 0, syntax_error = 0;
int i = 0;
while (buffer[i])
{
if (buffer[i] == ';' && flag == 1)
{
syntax_error = -1;
break;
}
else if (buffer[i] == ';' && flag == 0)
{
flag = 1;
}
else if (buffer[i] != ';' && buffer[i] != ' ' && flag == 1)
{
flag = 0;
}
i++;
}
return (syntax_error);
}
/**
* check_builtin - checks
* @command: a
* Return: 0 si es, -1 si no.
*/
int check_builtin(char *command)
{
if (!str_twins(command, "exit"))
return (0);
if (!str_twins(command, "env"))
return (0);
if (!str_twins(command, "help"))
return (0);
return (-1);
}
/**
* builtins - checks
* @input: a
* @env: a
* Return: 0 si no se ejecuta ningun builtin, 1 si se ejecuta, -1 error.
*/
int builtins(char **input, char **env)
{
int i = 0;
char *str;
if (!str_twins(input[0], "exit"))
{
free_argv(input);
return (2);
}
if (!str_twins(input[0], "help"))
{
print_help(input);
return (1);
}
if (!str_twins(input[0], "env"))
{
i = 0;
while (env[i])
{
str = env[i];
write(STDOUT_FILENO, str, str_len(str));
write(STDOUT_FILENO, "\n", 1);
i++;
}
return (1);
}
return (0);
}
/**
* print_help - print help of how to use builtins commands.
* @input: input buffer.
*/
void print_help(char **input)
{
char *str;
if (input[1] != NULL)
{
if (!str_twins(input[1], "help"))
{
str = "help: help [pattern ...]\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\tDisplay information about builtin commands.\n\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\tDisplays brief summaries of builtin commands. If PATTERN is\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\tspecified, gives detailed help on all commands matching PATTERN,";
write(STDOUT_FILENO, str, str_len(str));
str = "\n\totherwise the list of help topics is printed.\n\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\tArguments:\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\t PATTERN Pattern specifiying a help topic\n";
write(STDOUT_FILENO, str, str_len(str));
}
else if (!str_twins(input[1], "exit"))
{
str = "exit: exit\n";
write(STDOUT_FILENO, str, str_len(str));
str = "\tExit the shell.\n";
write(STDOUT_FILENO, str, str_len(str));
}
}
else
{
str = "These shell commands are defined internally.\n";
write(STDOUT_FILENO, str, str_len(str));
str = "Type `help name' to find out more about the function `name'.\n\n";
write(STDOUT_FILENO, str, str_len(str));
str = " help [pattern ...]\n";
write(STDOUT_FILENO, str, str_len(str));
str = " exit\n";
write(STDOUT_FILENO, str, str_len(str));
}
}