+static int isarg_integer(const char *s) {
+ if(!*s) return 0;
+ while(*s) {
+ if(!isdigit((unsigned char)*s))
+ return 0;
+ ++s;
+ }
+ return 1;
+}
+
+static void cf_new(disorder_client *c,
+ char **argv) {
+ char **vec;
+
+ if(disorder_new_tracks(c, &vec, 0, argv[0] ? atoi(argv[0]) : 0))
+ exit(EXIT_FAILURE);
+ while(*vec)
+ xprintf("%s\n", nullcheck(utf82mb(*vec++)));
+}
+
+static void cf_rtp_address(disorder_client *c,
+ char attribute((unused)) **argv) {
+ char *address, *port;
+
+ if(disorder_rtp_address(c, &address, &port)) exit(EXIT_FAILURE);
+ xprintf("address: %s\nport: %s\n", address, port);
+}
+
+static void cf_adduser(disorder_client *c,
+ char **argv) {
+ if(disorder_adduser(c, argv[0], argv[1]))
+ exit(EXIT_FAILURE);
+}
+
+static void cf_deluser(disorder_client *c,
+ char **argv) {
+ if(disorder_deluser(c, argv[0]))
+ exit(EXIT_FAILURE);
+}
+
+static void cf_edituser(disorder_client *c,
+ char **argv) {
+ if(disorder_edituser(c, argv[0], argv[1], argv[2]))
+ exit(EXIT_FAILURE);
+}
+
+static void cf_userinfo(disorder_client *c, char **argv) {
+ char *s;
+
+ if(disorder_userinfo(c, argv[0], argv[1], &s))
+ exit(EXIT_FAILURE);
+ xprintf("%s\n", nullcheck(utf82mb(s)));
+}
+