📄 gftpui.c
字号:
gftp_option_types[newcv.otype].write_function (&newcv, buf, sizeof (buf), 0); gftpui_common_logfunc (gftp_logging_misc_nolog, request, "%s = %s\n", newcv.key, buf); if (newcv.flags & GFTP_CVARS_FLAGS_DYNMEM) g_free (newcv.value); gftp_configuration_changed = 1; } } return (1);}static intgftpui_common_cmd_help (void *uidata, gftp_request * request, void *other_uidata, gftp_request * other_request, const char *command){ int i, j, ele, numrows, numcols = 6, handled, number_commands, cmdlen, found; char commands[128], cmdstr[30]; const char *pos; for (number_commands=0; gftpui_common_commands[number_commands].command != NULL; number_commands++); if (command != NULL && *command != '\0') { for (pos = command; *pos != ' ' && *pos != '\0'; pos++); cmdlen = pos - command; for (i=0; gftpui_common_commands[i].command != NULL; i++) { if (strncmp (gftpui_common_commands[i].command, command, cmdlen) == 0) break; } if (gftpui_common_commands[i].cmd_description != NULL) { found = 1; if (*pos != '\0' && *(pos + 1) != '\0' && gftpui_common_commands[i].subhelp_func != NULL) handled = gftpui_common_commands[i].subhelp_func (pos + 1); else handled = 0; if (!handled) gftpui_common_logfunc (gftp_logging_misc_nolog, request, "%s\n", _(gftpui_common_commands[i].cmd_description)); } else found = 0; } else found = 0; if (!found) { numrows = number_commands / numcols; if (number_commands % numcols != 0) numrows++; gftpui_common_logfunc (gftp_logging_misc_nolog, request, _("Supported commands:\n\n")); for (i=0; i<numrows; i++) { strncpy (commands, "\t", sizeof (commands)); for (j=0; j<numcols; j++) { ele = i + j * numrows; if (ele >= number_commands) break; g_snprintf (cmdstr, sizeof (cmdstr), "%-10s", gftpui_common_commands[ele].command); strncat (commands, cmdstr, sizeof (commands)); } gftpui_common_logfunc (gftp_logging_misc_nolog, request, "%s\n", commands); } } return (1);}static void_gftpui_common_transfer_files (void *fromuidata, gftp_request * fromrequest, void *touidata, gftp_request * torequest, const char *cmd, const char *filespec){ gftp_transfer * tdata; gftp_file * fle; if (!GFTP_IS_CONNECTED (fromrequest) || !GFTP_IS_CONNECTED (torequest)) { fromrequest->logging_function (gftp_logging_error, fromrequest, _("Error: Not connected to a remote site\n")); return; } if (*filespec == '\0') { fromrequest->logging_function (gftp_logging_error, fromrequest, _("usage: %s <filespec>\n"), cmd); return; } tdata = gftp_tdata_new (); tdata->fromreq = fromrequest; tdata->toreq = torequest; if (gftp_list_files (tdata->fromreq) != 0) { tdata->fromreq = tdata->toreq = NULL; free_tdata (tdata); return; } fle = g_malloc0 (sizeof (*fle)); while (gftp_get_next_file (tdata->fromreq, filespec, fle) > 0) { if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0) { gftp_file_destroy (fle, 0); continue; } tdata->files = g_list_append (tdata->files, fle); fle = g_malloc (sizeof (*fle)); } g_free (fle); gftp_end_transfer (tdata->fromreq); if (tdata->files == NULL) { tdata->fromreq = tdata->toreq = NULL; free_tdata (tdata); return; } if (gftp_get_all_subdirs (tdata, NULL) != 0) { tdata->fromreq = tdata->toreq = NULL; free_tdata (tdata); return; } if (tdata->files == NULL) { tdata->fromreq = tdata->toreq = NULL; free_tdata (tdata); return; } gftpui_common_add_file_transfer (tdata->fromreq, tdata->toreq, fromuidata, touidata, tdata->files); g_free (tdata); return;}intgftpui_common_cmd_mget_file (void *uidata, gftp_request * request, void *other_uidata, gftp_request * other_request, const char *command){ _gftpui_common_transfer_files (uidata, request, other_uidata, other_request, "mget", command); return (1);}intgftpui_common_cmd_mput_file (void *uidata, gftp_request * request, void *other_uidata, gftp_request * other_request, const char *command){ _gftpui_common_transfer_files (other_uidata, other_request, uidata, request, "mput", command); return (1);}gftpui_common_methods gftpui_common_commands[] = { {N_("about"), 2, gftpui_common_cmd_about, gftpui_common_request_none, N_("Shows gFTP information"), NULL}, {N_("ascii"), 2, gftpui_common_cmd_ascii, gftpui_common_request_remote, N_("Sets the current file transfer mode to Ascii (only for FTP)"), NULL}, {N_("binary"), 1, gftpui_common_cmd_binary, gftpui_common_request_remote, N_("Sets the current file transfer mode to Binary (only for FTP)"), NULL}, {N_("cd"), 2, gftpui_common_cmd_chdir, gftpui_common_request_remote, N_("Changes the remote working directory"), NULL}, {N_("chdir"), 3, gftpui_common_cmd_chdir, gftpui_common_request_remote, N_("Changes the remote working directory"), NULL}, {N_("chmod"), 3, gftpui_common_cmd_chmod, gftpui_common_request_remote, N_("Changes the permissions of a remote file"), NULL}, {N_("clear"), 3, gftpui_common_cmd_clear, gftpui_common_request_none, N_("Available options: cache"), gftpui_common_clear_show_subhelp}, {N_("close"), 3, gftpui_common_cmd_close, gftpui_common_request_remote, N_("Disconnects from the remote site"), NULL}, {N_("delete"), 1, gftpui_common_cmd_delete, gftpui_common_request_remote, N_("Removes a remote file"), NULL}, {N_("dir"), 3, gftpui_common_cmd_ls, gftpui_common_request_remote, N_("Shows the directory listing for the current remote directory"), NULL}, {N_("get"), 1, gftpui_common_cmd_mget_file, gftpui_common_request_remote, N_("Downloads remote file(s)"), NULL}, {N_("help"), 1, gftpui_common_cmd_help, gftpui_common_request_none, N_("Shows this help screen"), NULL}, {N_("lcd"), 3, gftpui_common_cmd_chdir, gftpui_common_request_local, N_("Changes the local working directory"), NULL}, {N_("lchdir"), 4, gftpui_common_cmd_chdir, gftpui_common_request_local, N_("Changes the local working directory"), NULL}, {N_("lchmod"), 4, gftpui_common_cmd_chmod, gftpui_common_request_local, N_("Changes the permissions of a local file"), NULL}, {N_("ldelete"), 2, gftpui_common_cmd_delete, gftpui_common_request_local, N_("Removes a local file"), NULL}, {N_("ldir"), 4, gftpui_common_cmd_ls, gftpui_common_request_local, N_("Shows the directory listing for the current local directory"), NULL}, {N_("lls"), 2, gftpui_common_cmd_ls, gftpui_common_request_local, N_("Shows the directory listing for the current local directory"), NULL}, {N_("lmkdir"), 2, gftpui_common_cmd_mkdir, gftpui_common_request_local, N_("Creates a local directory"), NULL}, {N_("lpwd"), 2, gftpui_common_cmd_pwd, gftpui_common_request_local, N_("Show current local directory"), NULL}, {N_("lrename"), 3, gftpui_common_cmd_rename, gftpui_common_request_local, N_("Rename a local file"), NULL}, {N_("lrmdir"), 3, gftpui_common_cmd_rmdir, gftpui_common_request_local, N_("Remove a local directory"), NULL}, {N_("ls"), 2, gftpui_common_cmd_ls, gftpui_common_request_remote, N_("Shows the directory listing for the current remote directory"), NULL}, {N_("mget"), 2, gftpui_common_cmd_mget_file, gftpui_common_request_remote, N_("Downloads remote file(s)"), NULL}, {N_("mkdir"), 2, gftpui_common_cmd_mkdir, gftpui_common_request_remote, N_("Creates a remote directory"), NULL}, {N_("mput"), 2, gftpui_common_cmd_mput_file, gftpui_common_request_remote, N_("Uploads local file(s)"), NULL}, {N_("open"), 1, gftpui_common_cmd_open, gftpui_common_request_remote, N_("Opens a connection to a remote site"), NULL}, {N_("put"), 2, gftpui_common_cmd_mput_file, gftpui_common_request_remote, N_("Uploads local file(s)"), NULL}, {N_("pwd"), 2, gftpui_common_cmd_pwd, gftpui_common_request_remote, N_("Show current remote directory"), NULL}, {N_("quit"), 1, gftpui_common_cmd_quit, gftpui_common_request_none, N_("Exit from gFTP"), NULL}, {N_("rename"), 2, gftpui_common_cmd_rename, gftpui_common_request_remote, N_("Rename a remote file"), NULL}, {N_("rmdir"), 2, gftpui_common_cmd_rmdir, gftpui_common_request_remote, N_("Remove a remote directory"), NULL}, {N_("set"), 1, gftpui_common_cmd_set, gftpui_common_request_none, N_("Show configuration file variables. You can also set variables by set var=val"), gftpui_common_set_show_subhelp}, {N_("site"), 2, gftpui_common_cmd_site, gftpui_common_request_remote, N_("Run a site specific command"), NULL}, {NULL, 0, NULL, gftpui_common_request_none, NULL, NULL}};intgftpui_common_process_command (void *locui, gftp_request * locreq, void *remui, gftp_request * remreq, const char *command){ gftp_request * request, * other_request; void *uidata, *other_uidata; char *pos, *newstr; const char *stpos; size_t cmdlen; int ret, i; size_t len; for (stpos = command; *stpos == ' ' || *stpos == '\t'; stpos++); newstr = g_strdup (stpos); len = strlen (newstr); if (len > 0 && newstr[len - 1] == '\n') newstr[--len] = '\0'; if (len > 0 && newstr[len - 1] == '\r') newstr[--len] = '\0'; for (pos = newstr + len - 1; (*pos == ' ' || *pos == '\t') && pos > newstr; pos--) *pos = '\0'; if (*stpos == '\0') { g_free (newstr); return (1); } if ((pos = strchr (newstr, ' ')) != NULL) *pos = '\0'; cmdlen = strlen (newstr); for (i=0; gftpui_common_commands[i].command != NULL; i++) { if (strcmp (gftpui_common_commands[i].command, newstr) == 0) break; else if (cmdlen >= gftpui_common_commands[i].minlen && strncmp (gftpui_common_commands[i].command, newstr, cmdlen) == 0) break; } if (pos != NULL) pos++; else pos = ""; if (gftpui_common_commands[i].reqtype == gftpui_common_request_local) { request = locreq; uidata = locui; other_request = remreq; other_uidata = remui; } else if (gftpui_common_commands[i].reqtype == gftpui_common_request_remote) { request = remreq; uidata = remui; other_request = locreq; other_uidata = locui; } else { request = other_request = NULL; uidata = other_uidata = NULL; } if (gftpui_common_commands[i].command != NULL) { ret = gftpui_common_commands[i].func (uidata, request, other_uidata, other_request, pos); if (request != NULL && !GFTP_IS_CONNECTED (request)) gftpui_disconnect (uidata); } else { gftpui_common_logfunc (gftp_logging_error, request, _("Error: Command not recognized\n")); ret = 1; } g_free (newstr); return (ret);}gftp_transfer *gftpui_common_add_file_transfer (gftp_request * fromreq, gftp_request * toreq, void *fromuidata, void *touidata, GList * files){ intptr_t append_transfers, one_transfer; GList * templist, *curfle; gftp_transfer * tdata; gftp_file * tempfle; int show_dialog; for (templist = files; templist != NULL; templist = templist->next) { tempfle = templist->data; if (tempfle->startsize > 0) break; } show_dialog = templist != NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -