3 * Bacula Director -- User Agent Input and scanning code
5 * Kern Sibbald, October MMI
11 Copyright (C) 2000-2004 Kern Sibbald and John Walker
13 This program is free software; you can redistribute it and/or
14 modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation; either version 2 of
16 the License, or (at your option) any later version.
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
23 You should have received a copy of the GNU General Public
24 License along with this program; if not, write to the Free
25 Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
34 /* Imported variables */
37 /* Exported functions */
39 int get_cmd(UAContext *ua, const char *prompt)
41 BSOCK *sock = ua->UA_sock;
45 if (!sock) { /* No UA */
48 bnet_fsend(sock, "%s", prompt);
49 bnet_sig(sock, BNET_PROMPT); /* request more input */
51 stat = bnet_recv(sock);
52 if (stat == BNET_SIGNAL) {
53 continue; /* ignore signals */
55 if (is_bnet_stop(sock)) {
56 return 0; /* error or terminate */
58 pm_strcpy(ua->cmd, sock->msg);
59 strip_trailing_junk(ua->cmd);
60 if (strcmp(ua->cmd, ".messages") == 0) {
61 qmessagescmd(ua, ua->cmd);
63 /* Lone dot => break */
64 if (ua->cmd[0] == '.' && ua->cmd[1] == 0) {
73 * Get a positive integer
74 * Returns: false if failure
75 * true if success => value in ua->pint32_val
77 bool get_pint(UAContext *ua, const char *prompt)
84 if (!get_cmd(ua, prompt)) {
87 /* Kludge for slots blank line => 0 */
88 if (ua->cmd[0] == 0 && strncmp(prompt, "Enter slot", 10) == 0) {
91 if (!is_a_number(ua->cmd)) {
92 bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd);
96 dval = strtod(ua->cmd, NULL);
97 if (errno != 0 || dval < 0) {
98 bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd);
101 ua->pint32_val = (uint32_t)dval;
102 ua->int64_val = (int64_t)dval;
108 * Gets a yes or no response
109 * Returns: false if failure
110 * true if success => ua->pint32_val == 1 for yes
111 * ua->pint32_val == 0 for no
113 bool get_yesno(UAContext *ua, const char *prompt)
119 if (!get_cmd(ua, prompt)) {
122 len = strlen(ua->cmd);
123 if (len < 1 || len > 3) {
126 if (strncasecmp(ua->cmd, _("yes"), len) == 0) {
130 if (strncasecmp(ua->cmd, _("no"), len) == 0) {
133 bsendmsg(ua, _("Invalid response. You must answer yes or no.\n"));
138 void parse_ua_args(UAContext *ua)
140 parse_args(ua->cmd, &ua->args, &ua->argc, ua->argk, ua->argv, MAX_CMD_ARGS);