add --version to bti.c
[gregoa/bti.git] / bti.c
diff --git a/bti.c b/bti.c
index 11ba091..7baf337 100644 (file)
--- a/bti.c
+++ b/bti.c
@@ -44,7 +44,7 @@ struct session {
        char *password;
        char *account;
        char *tweet;
-       int quiet;
+       int clean;
 };
 
 struct bti_curl_buffer {
@@ -61,12 +61,17 @@ static void display_help(void)
        fprintf(stdout, "options are:\n");
        fprintf(stdout, "  --account accountname\n");
        fprintf(stdout, "  --password password\n");
-       fprintf(stdout, "  --bash\n");
-       fprintf(stdout, "  --quiet\n");
+       fprintf(stdout, "  --clean\n");
        fprintf(stdout, "  --debug\n");
+       fprintf(stdout, "  --version\n");
        fprintf(stdout, "  --help\n");
 }
 
+static void display_version(void)
+{
+       fprintf(stdout, "bti - version %s\n", BTI_VERSION);
+}
+
 static char *get_string_from_stdin(void)
 {
        char *temp;
@@ -293,14 +298,19 @@ int main(int argc, char *argv[], char *envp[])
                { "debug", 0, NULL, 'd' },
                { "account", 1, NULL, 'a' },
                { "password", 1, NULL, 'p' },
-               { "bash", 1, NULL, 'b' },
                { "help", 0, NULL, 'h' },
-               { "quiet", 0, NULL, 'q' },
+               { "clean", 0, NULL, 'c' },
+               { "version", 0, NULL, 'v' },
                { }
        };
        struct session *session;
+       pid_t child;
+       char *tweet;
        int retval;
        int option;
+       char *home = getenv("HOME");
+       char *pwd = getenv("PWD");
+       char *dir;
 
        session = session_alloc();
        if (!session) {
@@ -332,12 +342,15 @@ int main(int argc, char *argv[], char *envp[])
                        session->password = strdup(optarg);
                        dbg("password = %s\n", session->password);
                        break;
-               case 'q':
-                       session->quiet = 1;
+               case 'c':
+                       session->clean = 1;
                        break;
                case 'h':
                        display_help();
                        goto exit;
+               case 'v':
+                       display_version();
+                       goto exit;
                default:
                        display_help();
                        goto exit;
@@ -354,17 +367,44 @@ int main(int argc, char *argv[], char *envp[])
                session->password = get_string_from_stdin();
        }
 
-       session->tweet = get_string_from_stdin();
+       if (strcmp(pwd, home) == 0)
+               dir = "~";
+       else {
+               dir = strrchr(pwd, '/');
+               if (dir)
+                       dir++;
+               else
+                       dir = "?";
+       }
 
-       if (strlen(session->tweet) == 0) {
+       /* Add the "PWD $ " to the start of the tweet to show it is
+        * coming from a shell unless --clean is specified. */
+       tweet = get_string_from_stdin();
+       if (strlen(tweet) == 0) {
                dbg("no tweet?\n");
                return -1;
        }
 
+       session->tweet = zalloc(strlen(tweet) + strlen(dir) + 10);
+       if (session->clean)
+               sprintf(session->tweet, "%s", tweet);
+       else
+               sprintf(session->tweet, "%s $ %s", dir, tweet);
+       free(tweet);
+
        dbg("account = %s\n", session->account);
        dbg("password = %s\n", session->password);
        dbg("tweet = %s\n", session->tweet);
 
+       /* fork ourself so that the main shell can get on
+        * with it's life as we try to connect and handle everything
+        */
+       child = fork();
+       if (child) {
+               dbg("child is %d\n", child);
+               exit(0);
+       }
+
        retval = send_tweet(session);
        if (retval) {
                fprintf(stderr, "tweet failed\n");