summaryrefslogtreecommitdiff
path: root/DOCS.md
blob: efa991dc0d5e6da844db49bde96e9b49dcc4dfe7 (plain)
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
# Shell em Zig

Um shell simples implementado em Zig que suporta comandos builtin e execução de programas externos.

## Estrutura do Projeto

```
src/
├── main.zig        # Ponto de entrada e loop REPL
├── parser.zig      # Parsing de comandos e argumentos
├── builtins.zig    # Implementação de comandos builtin
├── path.zig        # Busca de executáveis no PATH
├── executor.zig    # Execução de programas externos
└── shell.zig       # Orquestração de comandos
```

## Módulos

### main.zig
- Ponto de entrada da aplicação
- Implementa o REPL (Read-Eval-Print Loop)
- Gerencia entrada/saída do shell

### parser.zig
- `parseCommand()`: Separa nome do comando dos argumentos
- `parseArgs()`: Converte string de argumentos em array

### builtins.zig
- `isBuiltin()`: Verifica se comando é builtin
- `executeExit()`: Implementa comando `exit`
- `executeEcho()`: Implementa comando `echo`
- `executeType()`: Implementa comando `type`

### path.zig
- `findInPath()`: Busca executáveis no PATH do sistema
- Verifica permissões de execução

### executor.zig
- `runExternalProgram()`: Executa programas externos
- Gerencia processos filhos

### shell.zig
- `executeCommand()`: Orquestra execução de comandos
- Decide entre builtin ou programa externo

## Comandos Suportados

### Builtins
- `exit` - Encerra o shell
- `echo [args]` - Imprime argumentos
- `type <command>` - Mostra tipo/localização do comando

### Programas Externos
Qualquer executável encontrado no PATH pode ser executado.

## Compilar e Executar

```bash
# Compilar
zig build

# Executar
./zig-out/bin/main
```

## Como Adicionar Novos Builtins

1. Adicione o nome à lista `BUILTINS` em `builtins.zig`
2. Implemente a função `executeNomeDoComando()` em `builtins.zig`
3. Adicione o case no `executeCommand()` em `shell.zig`