int main(int argc, char *argv[]) { char server_buf[256]; char *server = NULL; char *play_file = NULL; char *volume = NULL; char *seek = NULL; int query = 0; int i, nr_cmds = 0; int context = 'p'; program_name = argv[0]; argv++; while (1) { int idx; char *arg; idx = get_option(&argv, options, &arg); if (idx < 0) break; flags[idx] = 1; switch ((enum flags)idx) { case FLAG_HELP: printf(usage, program_name, program_name, program_name); return 0; case FLAG_VERSION: printf("cmus " VERSION "\nCopyright 2004-2006 Timo Hirvonen\n"); return 0; case FLAG_SERVER: server = arg; break; case FLAG_PASSWD: passwd = arg; break; case FLAG_VOLUME: volume = arg; nr_cmds++; break; case FLAG_SEEK: seek = arg; nr_cmds++; break; case FLAG_QUERY: query = 1; nr_cmds++; break; case FLAG_FILE: play_file = arg; nr_cmds++; break; case FLAG_LIBRARY: context = 'l'; break; case FLAG_PLAYLIST: context = 'p'; break; case FLAG_QUEUE: context = 'q'; break; case FLAG_PLAY: case FLAG_PAUSE: case FLAG_STOP: case FLAG_NEXT: case FLAG_PREV: case FLAG_REPEAT: case FLAG_SHUFFLE: case FLAG_CLEAR: nr_cmds++; break; case FLAG_RAW: raw_args = 1; break; } } if (nr_cmds && raw_args) die("don't mix raw and cooked stuff\n"); if (server == NULL) { const char *config_dir = getenv("CMUS_HOME"); if (config_dir && config_dir[0]) { snprintf(server_buf, sizeof(server_buf), "%s/socket", config_dir); } else { const char *home = getenv("HOME"); if (!home) die("error: environment variable HOME not set\n"); snprintf(server_buf, sizeof(server_buf), "%s/.cmus/socket", home); } server = server_buf; } remote_connect(server); if (raw_args) { while (*argv) send_cmd("%s\n", *argv++); return 0; } if (nr_cmds == 0 && argv[0] == NULL) { char line[512]; while (fgets(line, sizeof(line), stdin)) write_line(line); return 0; } if (flags[FLAG_CLEAR]) send_cmd("clear -%c\n", context); for (i = 0; argv[i]; i++) { char *filename = file_url_absolute(argv[i]); send_cmd("add -%c %s\n", context, filename); free(filename); } if (flags[FLAG_REPEAT]) send_cmd("toggle repeat\n"); if (flags[FLAG_SHUFFLE]) send_cmd("toggle shuffle\n"); if (flags[FLAG_STOP]) send_cmd("player-stop\n"); if (flags[FLAG_NEXT]) send_cmd("player-next\n"); if (flags[FLAG_PREV]) send_cmd("player-prev\n"); if (flags[FLAG_PLAY]) send_cmd("player-play\n"); if (flags[FLAG_PAUSE]) send_cmd("player-pause\n"); if (flags[FLAG_FILE]) send_cmd("player-play %s\n", file_url_absolute(play_file)); if (volume) send_cmd("vol %s\n", volume); if (seek) send_cmd("seek %s\n", seek); if (query) send_cmd("status\n"); return 0; }
int main(int argc, char *argv[]) { char *server = NULL; char *play_file = NULL; char *volume = NULL; char *seek = NULL; int query = 0; int i, nr_cmds = 0; int context = 'p'; program_name = argv[0]; argv++; while (1) { int idx; char *arg; idx = get_option(&argv, options, &arg); if (idx < 0) break; flags[idx] = 1; switch ((enum flags)idx) { case FLAG_HELP: printf(usage, program_name, program_name, program_name); return 0; case FLAG_VERSION: printf("cmus " VERSION "\nCopyright 2004-2006 Timo Hirvonen" "\nCopyright 2008-2015 Various Authors\n"); return 0; case FLAG_SERVER: server = arg; break; case FLAG_PASSWD: passwd = arg; break; case FLAG_VOLUME: volume = arg; nr_cmds++; break; case FLAG_SEEK: seek = arg; nr_cmds++; break; case FLAG_QUERY: query = 1; nr_cmds++; break; case FLAG_FILE: play_file = arg; nr_cmds++; break; case FLAG_LIBRARY: context = 'l'; break; case FLAG_PLAYLIST: context = 'p'; break; case FLAG_QUEUE: context = 'q'; break; case FLAG_PLAY: case FLAG_PAUSE: case FLAG_STOP: case FLAG_NEXT: case FLAG_PREV: case FLAG_REPEAT: case FLAG_SHUFFLE: case FLAG_CLEAR: nr_cmds++; break; case FLAG_RAW: raw_args = 1; break; } } if (nr_cmds && raw_args) die("don't mix raw and cooked stuff\n"); misc_init(); if (server == NULL) server = xstrdup(cmus_socket_path); if (!remote_connect(server)) return 1; if (raw_args) { while (*argv) send_cmd("%s\n", *argv++); return 0; } if (nr_cmds == 0 && argv[0] == NULL) { char line[512]; while (fgets(line, sizeof(line), stdin)) write_line(line); return 0; } if (flags[FLAG_CLEAR]) send_cmd("clear -%c\n", context); for (i = 0; argv[i]; i++) { char *filename = file_url_absolute(argv[i]); send_cmd("add -%c %s\n", context, filename); free(filename); } if (flags[FLAG_REPEAT]) send_cmd("toggle repeat\n"); if (flags[FLAG_SHUFFLE]) send_cmd("toggle shuffle\n"); if (flags[FLAG_STOP]) send_cmd("player-stop\n"); if (flags[FLAG_NEXT]) send_cmd("player-next\n"); if (flags[FLAG_PREV]) send_cmd("player-prev\n"); if (flags[FLAG_PLAY]) send_cmd("player-play\n"); if (flags[FLAG_PAUSE]) send_cmd("player-pause\n"); if (flags[FLAG_FILE]) send_cmd("player-play %s\n", file_url_absolute(play_file)); if (volume) send_cmd("vol %s\n", volume); if (seek) send_cmd("seek %s\n", seek); if (query) send_cmd("status\n"); return 0; }