Updated the about command
[vimicxx.git] / src / cmd_line.cc
blob7b9764e6df1cce0570ce9ff647a21e280c509bdd
1 /*******************************************************************************
2 ********************************************************************************
4 Copyright (c) 2008 Ahmed S. Badran
6 Licensed under the FreeBSD License (see LICENSE)
8 Filename: cmd_line.cc
9 Description: Implementation.
10 Created: 12/15/2008 07:32:54 PM PST
11 Author: Ahmed S. Badran (Ahmed B.), ahmed.badran@gmail.com
13 ********************************************************************************
14 *******************************************************************************/
15 #include "cmd_line.h"
16 #include "cmd_add.h"
17 #include "cmd_about.h"
18 #include "cmd_help.h"
19 #include <cstdlib>
20 #include <cstring>
21 #include <cerrno>
22 #include <sys/stat.h>
24 using namespace std;
25 using namespace vimicxx;
27 static cmd_if* parse_cmd_add(int argc, char** argv, string* err);
28 static cmd_if* parse_cmd_help(int argc, char** argv, string* err);
29 static cmd_if* parse_cmd_about(int argc, char** argv, string* err);
30 static cmd_if* parse_cmd_list(int argc, char** argv, string* err);
31 static cmd_if* parse_cmd_delete(int argc, char** argv, string* err);
32 static cmd_if* parse_cmd_delete_all(int argc, char** argv, string* err);
34 cmd_if* vimicxx::parse_cmd_line(int argc, char** argv, string* err)
36 if (argc < 2) {
37 char buf[1024] = {0};
38 sprintf(buf, "%s needs at least two arguments, try %s --help",
39 argv[0], argv[0]);
40 *err = buf;
41 return NULL;
43 if (strcmp(argv[1], "add") == 0) {
44 return parse_cmd_add(argc, argv, err);
45 } else if (strcmp(argv[1], "list") == 0) {
46 return parse_cmd_list(argc, argv, err);
47 } else if (strcmp(argv[1], "delete") == 0) {
48 return parse_cmd_delete(argc, argv, err);
49 } else if (strcmp(argv[1], "delete-all") == 0) {
50 return parse_cmd_delete_all(argc, argv, err);
51 } else if (strcmp(argv[1], "about") == 0) {
52 return parse_cmd_about(argc, argv, err);
53 } else if (strcmp(argv[1], "--help") == 0) {
54 return parse_cmd_help(argc, argv, err);
55 } else {
56 return NULL;
60 cmd_if* parse_cmd_add(int argc, char** argv, string* err)
62 if (argc < 5) {
63 *err = "cmd: add project <project-name> <path to project> \n";
64 return NULL;
65 } else if (strcmp(argv[2], "project") != 0) {
66 *err = "cmd: add project <project-name> <path to project> \n";
67 return NULL;
68 } else {
69 struct stat st;
70 if (stat(argv[4], &st) != 0) {
71 *err = strerror(errno);
72 return NULL;
73 } else if (! S_ISDIR(st.st_mode)) {
74 *err = "path ";
75 *err += argv[4];
76 *err += "is not a directory";
77 return NULL;
78 } else {
79 vector<string> e;
80 e.push_back(".c");
81 e.push_back(".cpp");
82 e.push_back(".cc");
83 e.push_back(".h");
84 return new cmd_add(argv[3], argv[4], e);
87 return NULL;
90 cmd_if* parse_cmd_list(int argc, char** argv, string* err)
92 return NULL;
95 cmd_if* parse_cmd_delete(int argc, char** argv, string* err)
97 return NULL;
100 cmd_if* parse_cmd_delete_all(int argc, char** argv, string* err)
102 return NULL;
105 cmd_if* parse_cmd_about(int argc, char** argv, string* err)
107 return new cmd_about(argv[0]);
110 cmd_if* parse_cmd_help(int argc, char** argv, string* err)
112 return new cmd_help(argv[0]);