summaryrefslogtreecommitdiff
path: root/src/main.c
blob: 98c0e81a17d390751046f4fe044155bed4806b1a (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
#include "shared.h"
#include "command.h"

#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>

int main (ARGUMENTS) {
    if (argc < 1) {
        error("error: argument 0 missing");
    }

    struct stat buf;
    lstat(argv[0], &buf);

    if (!S_ISLNK(buf.st_mode)) {
        if (argc < 2) {
            printf("usage: lazysphere [function [arguments]...]\n\n");
            printf("currently defined functions:\n");
            printf("\tdd, cat, yes, echo, printf\n");
            return EXIT_SUCCESS;
        }
        argc--;
        argv = &argv[1];
    }

    const char* cmd;
    if (strncmp("./", argv[0], 2) == 0) {
        cmd = argv[0] + 2;
    } else {
        cmd = argv[0];
    }

    if (streql(cmd, "dd")) {
        return dd(NEXT_ARGS);
    } else if (streql(cmd, "cat")) {
        return cat(NEXT_ARGS);
    } else if (streql(cmd, "yes")) {
        return yes(NEXT_ARGS);
    } else if (streql(cmd, "echo")) {
        return echo(NEXT_ARGS);
    } else if (streql(cmd, "printf")) {
        return print(NEXT_ARGS);
    } else {
        error("error: invalid command %s", cmd);
    }

    return EXIT_SUCCESS;
}