#include "../control/gskcontrolclient.h"
#include "../config.h"
#include "../gskinit.h"
#include <stdlib.h>
#include <stdio.h>
#if SUPPORT_READLINE
#include READLINE_HEADER_NAME
#include READLINE_HISTORY_HEADER_NAME
#define free_readline_result(ptr) /* no-op */
#else
static char *
my_readline (const char *prompt)
{
char buf[8192];
char *rv;
if (prompt)
fputs (prompt, stdout);
rv = g_strdup (fgets (buf, sizeof(buf), stdin));
if (rv)
g_strchomp (rv);
return rv;
}
#define free_readline_result(ptr) g_free(ptr)
#define readline my_readline
#define add_history(line)
#endif
static void usage ()
{
g_print ("usage: %s --socket=SOCKET OPTIONS\n", g_get_prgname ());
gsk_control_client_print_command_line_usage (GSK_CONTROL_CLIENT_OPTIONS_DEFAULT);
exit (1);
}
int main(int argc, char **argv)
{
int i;
GskControlClient *cc;
gsk_init_without_threads (&argc, &argv);
g_set_prgname ("gsk-control-client");
cc = gsk_control_client_new (NULL);
if (!gsk_control_client_parse_command_line_args
(cc, &argc, &argv, GSK_CONTROL_CLIENT_OPTIONS_DEFAULT))
return 0;
for (i = 1; i < argc; i++)
{
/* there are no special options for this program */
usage ();
}
if (!gsk_control_client_has_address (cc))
usage ();
for (;;)
{
char *prompt = gsk_control_client_get_prompt_string (cc);
char *cmd_orig = readline (prompt);
char *cmd = cmd_orig;
if (cmd == NULL)
break;
while (*cmd && isspace (*cmd))
cmd++;
if (*cmd == 0)
continue;
if (*cmd == '#')
{
add_history (cmd);
continue;
}
gsk_control_client_run_command_line (cc, cmd);
add_history (cmd);
free_readline_result (cmd_orig);
g_free (prompt);
}
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1