Blob


1 /*
2 * Copyright (c) 2022 Omar Polo <op@omarpolo.com>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
17 #ifndef nitems
18 #define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
19 #endif
21 enum ftp_cmd {
22 CMD_UNKNOWN,
23 CMD_BELL,
24 CMD_BYE,
25 CMD_CD,
26 CMD_EDIT,
27 CMD_GET,
28 CMD_HEXDUMP,
29 CMD_LCD,
30 CMD_LPWD,
31 CMD_LS,
32 CMD_PAGE,
33 CMD_PIPE,
34 CMD_PUT,
35 CMD_RENAME,
36 CMD_RM,
37 CMD_VERBOSE,
38 };
40 void compl_setup(void);
42 #if !HAVE_READLINE
43 char *readline(const char *);
44 void add_history(const char *);
45 #endif
47 int dir_listing(const char *, int (*)(const struct np_stat *), int);
49 void cmd_bell(int, const char **);
50 void cmd_bye(int, const char **);
51 void cmd_cd(int, const char **);
52 void cmd_edit(int, const char **);
53 void cmd_get(int, const char **);
54 void cmd_hexdump(int, const char **);
55 void cmd_lcd(int, const char **);
56 void cmd_lpwd(int, const char **);
57 void cmd_ls(int, const char **);
58 void cmd_page(int, const char **);
59 void cmd_pipe(int, const char **);
60 void cmd_put(int, const char **);
61 void cmd_rename(int, const char **);
62 void cmd_rm(int, const char **);
63 void cmd_verbose(int, const char **);
65 struct cmd {
66 const char *name;
67 int cmdtype;
68 void (*fn)(int, const char **);
69 };
71 static struct cmd cmds[] = {
72 {"bell", CMD_BELL, cmd_bell},
73 {"bye", CMD_BYE, cmd_bye},
74 {"cd", CMD_CD, cmd_cd},
75 {"edit", CMD_EDIT, cmd_edit},
76 {"get", CMD_GET, cmd_get},
77 {"hexdump", CMD_HEXDUMP, cmd_hexdump},
78 {"lcd", CMD_LCD, cmd_lcd},
79 {"lpwd", CMD_LPWD, cmd_lpwd},
80 {"ls", CMD_LS, cmd_ls},
81 {"page", CMD_PAGE, cmd_page},
82 {"pipe", CMD_PIPE, cmd_pipe},
83 {"put", CMD_PUT, cmd_put},
84 {"quit", CMD_BYE, cmd_bye}, /* alias */
85 {"rename", CMD_RENAME, cmd_rename},
86 {"rm", CMD_RM, cmd_rm},
87 {"verbose", CMD_VERBOSE, cmd_verbose},
88 };