summaryrefslogtreecommitdiff
path: root/redes/preproc.c
diff options
context:
space:
mode:
Diffstat (limited to 'redes/preproc.c')
-rw-r--r--redes/preproc.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/redes/preproc.c b/redes/preproc.c
index 9448831..63e618f 100644
--- a/redes/preproc.c
+++ b/redes/preproc.c
@@ -78,6 +78,8 @@ Pipeline* process_token_sequence(TokenVec tokens, PipelineVec* pl_pool) {
PlCommand* root_pl;
for (int i = 0; i < exp_tokens.count; i++) {
ExpandedToken curr_tok = *get_from_ExpandedTokenVec(&exp_tokens, i);
+ ExpandedToken next_tok;
+ Redirect rd;
switch (curr_tok.kind) {
case TOK_WORD:
push_to_ArgVec(&curr_cmd.args, (Arg){.kind = ARG_LIT, .as.lit_str = curr_tok.as.word});
@@ -94,6 +96,24 @@ Pipeline* process_token_sequence(TokenVec tokens, PipelineVec* pl_pool) {
case OP_EOL:
push_to_Pipeline(&pl, curr_cmd);
break;
+ case OP_REDIR_R:
+ next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i);
+ assert(next_tok.kind == TOK_WORD);
+ rd = (Redirect){.kind = REDIR_READ, .as.filename = next_tok.as.word};
+ push_to_RedirectVec(&curr_cmd.redirects, rd);
+ break;
+ case OP_REDIR_W_APPEND:
+ next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i);
+ assert(next_tok.kind == TOK_WORD);
+ rd = (Redirect){.kind = REDIR_WRITE_APPEND, .as.filename = next_tok.as.word};
+ push_to_RedirectVec(&curr_cmd.redirects, rd);
+ break;
+ case OP_REDIR_W_TRUNC:
+ next_tok = *get_from_ExpandedTokenVec(&exp_tokens, ++i);
+ assert(next_tok.kind == TOK_WORD);
+ rd = (Redirect){.kind = REDIR_WRITE_TRUNC, .as.filename = next_tok.as.word};
+ push_to_RedirectVec(&curr_cmd.redirects, rd);
+ break;
default:
exit(63);
}