1 /* cmdlist.c 2 * 3 * Copyright (c) 1992-2016 by Mike Gleason. 4 * All rights reserved. 5 * 6 */ 7 8 #include "syshdrs.h" 9 #ifdef PRAGMA_HDRSTOP 10 # pragma hdrstop 11 #endif 12 13 #include "shell.h" 14 #include "bookmark.h" 15 #include "cmds.h" 16 17 /* These will be sorted lexiographically when the program is run, but 18 * they should already be listed that way. 19 */ 20 Command gCommands[] = { 21 #if (defined(WIN32) || defined(_WINDOWS)) && !defined(__CYGWIN__) 22 #else 23 { "!", 24 ShellCmd, 25 "[arguments]", 26 "Runs a subshell", 27 kCmdHidden, 28 kNoMin, kNoMax, 29 }, 30 #endif 31 { "?", 32 HelpCmd, 33 "[optional commands]", 34 "shows commands, or detailed help on specified commands", 35 kCmdHidden, 36 kNoMin, kNoMax, 37 }, 38 { "ascii", 39 TypeCmd, 40 "", 41 "sets the file transfer type to ASCII text", 42 kCmdMustBeConnected, 43 0, 0, 44 }, 45 #ifdef HAVE_LONG_FILE_NAMES 46 { "bgget", 47 SpoolGetCmd, 48 "[-flags] file1 [file2...]\n\ 49 Flags:\n\ 50 -z : Get the remote file file1, and name it to file2.\n\ 51 -@ <time> : Wait until <time> to do the transfer.\n\ 52 It must be expressed as one of the following:\n\ 53 YYYYMMDDHHMMSS\n\ 54 \"now + N hours|min|sec|days\"\n\ 55 HH:MM", 56 "collects items to download later from the remote host", 57 kCmdMustBeConnected | kCompleteRemoteFile, 58 1, kNoMax, 59 }, 60 { "bgput", 61 SpoolPutCmd, 62 "[-flags] file1 [file2...]\n\ 63 Flags:\n\ 64 -z : Send the local file file1, and name the remote copy to file2.\n\ 65 -@ <time> : Wait until <time> to do the transfer.\n\ 66 It must be expressed as one of the following:\n\ 67 YYYYMMDDHHMMSS\n\ 68 \"now + N hours|min|sec|days\"\n\ 69 HH:MM", 70 "collects items to upload later to the remote host", 71 kCmdMustBeConnected | kCompleteLocalFile, 72 1, kNoMax, 73 }, 74 { "bgstart", 75 BGStartCmd, 76 "[n]", 77 "starts a ncftpbatch process to process spooled files", 78 0, 79 0, 1, 80 }, 81 #endif /* HAVE_LONG_FILE_NAMES */ 82 { "binary", 83 TypeCmd, 84 "", 85 "sets the file transfer type to binary/image", 86 kCmdMustBeConnected, 87 0, 0, 88 }, 89 { "bookmark", 90 BookmarkCmd, 91 "[bookmark-name-to-save-as]", 92 "Creates or updates a bookmark using the current host and directory", 93 kCmdMustBeConnected | kCompleteBookmark, 94 0, 1, 95 }, 96 { "bookmarks", 97 (CmdProc) HostsCmd, 98 "[-l]", 99 "lets you edit the settings for each bookmark", 100 0, 101 kNoMin, kNoMax, 102 }, 103 { "bye", 104 (CmdProc) QuitCmd, 105 "", 106 "exits NcFTP", 107 kCmdHidden, 108 0, 0, 109 }, 110 { "cat", 111 CatCmd, 112 "file1 [file2...]", 113 "views a file from the remote host", 114 kCmdMustBeConnected | kCompleteRemoteFile, 115 1, kNoMax, 116 }, 117 { "cd", 118 ChdirCmd, 119 "<directory>", 120 "changes remote working directory", 121 kCmdMustBeConnected | kCompleteRemoteDir, 122 0, 1, 123 }, 124 { "chmod", 125 ChmodCmd, 126 "mode file1 [file2...]", 127 "changes permissions for files on the remote host", 128 kCmdMustBeConnected | kCompleteRemoteFile, 129 2, kNoMax, 130 }, 131 { "close", 132 (CmdProc) CloseCmd, 133 "", 134 "closes the connection to the remote host", 135 kCmdMustBeConnected, 136 0, 0, 137 }, 138 { "debug", 139 DebugCmd, 140 "[debug level]", 141 "sets debug mode to level x", 142 0, 143 kNoMin, kNoMax, 144 }, 145 { "delete", 146 DeleteCmd, 147 "file1 [file2...]", 148 "deletes files from the remote host", 149 kCmdMustBeConnected | kCmdHidden | kCompleteRemoteFile, 150 1, kNoMax, 151 }, 152 { "dir", 153 ListCmd, 154 "[items to list]", 155 "prints a verbose directory listing", 156 kCmdMustBeConnected | kCompleteRemoteDir | kCompleteRemoteFile, 157 kNoMin, kNoMax, 158 }, 159 { "echo", 160 EchoCmd, 161 "[items to echo]", 162 "echos back to screen", 163 kCmdHidden | kCompleteLocalFile | kCompleteLocalDir, 164 kNoMin, kNoMax, 165 }, 166 #if (defined(WIN32) || defined(_WINDOWS)) && !defined(__CYGWIN__) 167 #else 168 { "edit", 169 EditCmd, 170 "file1 [file2...]", 171 "edit remote files", 172 kCmdMustBeConnected | kCompleteRemoteFile, 173 1, kNoMax, 174 }, 175 #endif 176 { "exit", 177 (CmdProc) QuitCmd, 178 "", 179 "quits NcFTP", 180 kCmdHidden, 181 0, 0, 182 }, 183 { "get", 184 GetCmd, 185 "[-flags] file1 [file2...]\n\ 186 Flags:\n\ 187 -R : Recursive. Useful for fetching whole directories.\n\ 188 -z : Get the remote file file1, and name it to file2.\n\ 189 -a : Get files using ASCII mode.\n\ 190 -A : Append entire remote file to the local file.\n\ 191 -f : Force overwrite (do not try to auto-resume transfers).\n\ 192 Examples:\n\ 193 get README\n\ 194 get README.*\n\ 195 get \"**Name with stars and spaces in it**\"\n\ 196 get -R new-files-directory\n\ 197 get -z WIN.INI ~/junk/windows-init-file", 198 "fetches files from the remote host", 199 kCmdMustBeConnected | kCompleteRemoteFile, 200 1, kNoMax, 201 }, 202 { "help", 203 HelpCmd, 204 "[optional commands]", 205 "shows commands, or detailed help on specified commands", 206 0, 207 kNoMin, kNoMax, 208 }, 209 { "hosts", 210 (CmdProc) HostsCmd, 211 "", 212 "lets you edit the settings for each remote host", 213 kCmdMustBeDisconnected | kCmdHidden, 214 kNoMin, kNoMax, 215 }, 216 #if (defined(WIN32) || defined(_WINDOWS)) && !defined(__CYGWIN__) 217 #else 218 #ifdef HAVE_LONG_FILE_NAMES 219 { "jobs", 220 (CmdProc) JobsCmd, 221 "", 222 "shows status of background NcFTP tasks", 223 0, 224 0, 0, 225 }, 226 #endif /* HAVE_LONG_FILE_NAMES */ 227 #endif 228 { "lcd", 229 LocalChdirCmd, 230 "<directory>", 231 "changes local working directory", 232 kCompleteLocalDir, 233 kNoMin, 1, 234 }, 235 #if (defined(WIN32) || defined(_WINDOWS)) && !defined(__CYGWIN__) 236 #else 237 { "lchmod", 238 LocalChmodCmd, 239 "mode file1 [file2...]", 240 "changes permissions for files on the local host", 241 kCompleteLocalFile | kCompleteLocalDir, 242 2, kNoMax, 243 }, 244 #endif 245 { "less", 246 PageCmd, 247 "file1 [file2...]", 248 "views a file from the remote host one page at a time", 249 kCmdMustBeConnected | kCmdHidden | kCompleteRemoteFile, 250 1, kNoMax, 251 }, 252 { "lls", 253 LocalListCmd, 254 "[items to list]", 255 "prints a local directory listing", 256 kCompleteLocalDir, 257 kNoMin, kNoMax, 258 }, 259 { "lmkdir", 260 (CmdProc) LocalMkdirCmd, 261 "[directories]", 262 "creates directories on the local host", 263 0, 264 1, kNoMax, 265 }, 266 { "lookup", 267 LookupCmd, 268 "[-v|-V] <host or IP number> [<more hosts or IP numbers>]", 269 "looks up information in the host database", 270 0, 271 1, kNoMax, 272 }, 273 #if (defined(WIN32) || defined(_WINDOWS)) && !defined(__CYGWIN__) 274 #else 275 { "lpage", 276 LocalPageCmd, 277 "file1 [file2...]", 278 "views a file on the local host one page at a time", 279 kCompleteLocalFile, 280 1, kNoMax, 281 }, 282 #endif 283 { "lpwd", 284 (CmdProc) LocalPwdCmd, 285 "", 286 "Prints the current local working directory", 287 0, 288 0, 0, 289 }, 290 { "lrename", 291 LocalRenameCmd, 292 "oldname newname", 293 "changes the name of a file on the local host", 294 kCompleteLocalFile | kCompleteLocalDir, 295 2, 2, 296 }, 297 { "lrm", 298 (CmdProc) LocalRmCmd, 299 "[files]", 300 "removes files on the local host", 301 kCompleteLocalFile | kCompleteLocalDir, 302 1, kNoMax, 303 }, 304 { "lrmdir", 305 (CmdProc) LocalRmdirCmd, 306 "[directories]", 307 "removes directories on the local host", 308 kCompleteLocalDir, 309 1, kNoMax, 310 }, 311 { "ll", 312 ListCmd, 313 "[items to list]", 314 "prints a verbose directory listing", 315 kCmdMustBeConnected | kCompleteRemoteDir | kCompleteRemoteFile | kCmdHidden, 316 kNoMin, kNoMax, 317 }, 318 { "ls", 319 ListCmd, 320 "[items to list]", 321 "prints a remote directory listing", 322 kCmdMustBeConnected | kCompleteRemoteDir | kCompleteRemoteFile, 323 kNoMin, kNoMax, 324 }, 325 { "mget", 326 GetCmd, 327 "[-flags] file1 [file2...]\n\ 328 Flags:\n\ 329 -R : Recursive. Useful for fetching whole directories.\n\ 330 -z : Get the remote file file1, and name it to file2.\n\ 331 -a : Get files using ASCII mode.\n\ 332 -A : Append entire remote file to the local file.\n\ 333 -f : Force overwrite (do not try to auto-resume transfers).\n\ 334 Examples:\n\ 335 get README\n\ 336 get README.*\n\ 337 get \"**Name with stars and spaces in it**\"\n\ 338 get -R new-files-directory\n\ 339 get -z WIN.INI ~/junk/windows-init-file", 340 "fetches files from the remote host", 341 kCmdMustBeConnected | kCmdHidden | kCompleteRemoteFile, 342 1, kNoMax, 343 }, 344 { "mkdir", 345 MkdirCmd, 346 "dir1 [dir2...]", 347 "creates directories on the remote host", 348 kCmdMustBeConnected, 349 1, kNoMax, 350 }, 351 { "mls", 352 MlsCmd, 353 "[<directory to list> | -d <single item to list>]", 354 "prints a machine-readable directory listing", 355 kCmdMustBeConnected | kCompleteRemoteDir | kCmdHidden, 356 kNoMin, kNoMax, 357 }, 358 { "more", 359 PageCmd, 360 "file1 [file2...]", 361 "views a file from the remote host one page at a time", 362 kCmdMustBeConnected | kCmdHidden | kCompleteRemoteFile, 363 1, kNoMax, 364 }, 365 { "mput", 366 PutCmd, 367 "[-flags] file1 [file2...]\n\ 368 Flags:\n\ 369 -z : Send the local file file1, and name the remote copy to file2.\n\ 370 -f : Force overwrite (do not try to auto-resume transfers).\n\ 371 -a : Send files using ASCII mode.\n\ 372 -A : Append entire local file to the remote file.\n\ 373 -R : Recursive. Useful for sending whole directories.\n\ 374 Examples:\n\ 375 put README\n\ 376 put -z ~/junk/windows-init-file WIN.INI", 377 "sends files to the remote host", 378 kCmdMustBeConnected | kCompleteLocalFile | kCmdHidden, 379 1, kNoMax, 380 }, 381 { "mv", 382 RenameCmd, 383 "oldname newname", 384 "changes the name of a file on the remote host", 385 kCmdMustBeConnected | kCompleteRemoteFile | kCmdHidden, 386 2, 2, 387 }, 388 { "page", 389 PageCmd, 390 "file1 [file2...]", 391 "views a file from the remote host one page at a time", 392 kCmdMustBeConnected | kCompleteRemoteFile, 393 1, kNoMax, 394 }, 395 { "passive", 396 PassiveCmd, 397 "", 398 "Toggles passive transfer mode", 399 0, 400 0, 0, 401 }, 402 { "open", 403 OpenCmd, 404 "[-flags] [sitename]\n\ 405 Flags:\n\ 406 -a : Open anonymously.\n\ 407 -u XX : Login with username XX.\n\ 408 -p XX : Login with password XX.\n\ 409 -j XX : Login with account XX.\n\ 410 -P XX : Use port number X when opening.\n\ 411 Examples:\n\ 412 open sphygmomanometer.unl.edu\n\ 413 open -u mario bowser.nintendo.co.jp\n", 414 "connects to a remote host", 415 kCompleteBookmark, 416 kNoMin, kNoMax, 417 }, 418 { "pdir", 419 ListCmd, 420 "[items to list]", 421 "views a directory listing through your pager", 422 kCmdMustBeConnected | kCompleteRemoteDir, 423 kNoMin, kNoMax, 424 }, 425 { "pls", 426 ListCmd, 427 "[items to list]", 428 "views a directory listing through your pager", 429 kCmdMustBeConnected | kCompleteRemoteDir, 430 kNoMin, kNoMax, 431 }, 432 { "prefs", 433 (CmdProc) SetCmd, 434 "", 435 "shows the program's settings", 436 kCmdHidden, 437 0, 0, 438 }, 439 { "put", 440 PutCmd, 441 "[-flags] file1 [file2...]\n\ 442 Flags:\n\ 443 -z : Send the local file file1, and name the remote copy to file2.\n\ 444 -f : Force overwrite (do not try to auto-resume transfers).\n\ 445 -a : Send files using ASCII mode.\n\ 446 -A : Append entire local file to the remote file.\n\ 447 -R : Recursive. Useful for sending whole directories.\n\ 448 Examples:\n\ 449 put README\n\ 450 put -z ~/junk/windows-init-file WIN.INI", 451 "sends a file to the remote host", 452 kCmdMustBeConnected | kCompleteLocalFile, 453 1, kNoMax, 454 }, 455 { "pwd", 456 (CmdProc) PwdCmd, 457 "", 458 "Prints the current remote working directory", 459 kCmdMustBeConnected, 460 0, 0, 461 }, 462 { "quit", 463 (CmdProc) QuitCmd, 464 "", 465 "take a wild guess", 466 0, 467 0, 0, 468 }, 469 { "quote", 470 QuoteCmd, 471 "command-string", 472 "sends an FTP command to the remote server", 473 kCmdMustBeConnected, 474 1, kNoMax, 475 }, 476 { "rename", 477 RenameCmd, 478 "oldname newname", 479 "changes the name of a file on the remote host", 480 kCmdMustBeConnected | kCompleteRemoteFile, 481 2, 2, 482 }, 483 { "rglob", 484 RGlobCmd, 485 "regex", 486 "tests remote filename wildcard matching", 487 kCmdMustBeConnected | kCmdHidden, 488 1, kNoMax, 489 }, 490 { "rhelp", 491 RmtHelpCmd, 492 "[help string]", 493 "requests help from the remote server", 494 kCmdMustBeConnected, 495 kNoMin, kNoMax, 496 }, 497 { "rm", 498 DeleteCmd, 499 "[-r] file1 [file2...]", 500 "deletes files from the remote host", 501 kCmdMustBeConnected | kCompleteRemoteFile, 502 1, kNoMax, 503 }, 504 { "rmdir", 505 RmdirCmd, 506 "dir1 [dir2...]", 507 "deletes directories from the remote host", 508 kCmdMustBeConnected | kCompleteRemoteDir, 509 1, kNoMax, 510 }, 511 { "set", 512 SetCmd, 513 "[option [newvalue]]", 514 "lets you configure a program setting from the command line", 515 kCompletePrefOpt, 516 0, 2, 517 }, 518 { "show", 519 (CmdProc) SetCmd, 520 "[option]", 521 "shows one or more the program's settings", 522 kCompletePrefOpt, 523 0, 1, 524 }, 525 { "site", 526 SiteCmd, 527 "command-string", 528 "sends a host-specific FTP command to the remote server", 529 kCmdMustBeConnected, 530 1, kNoMax, 531 }, 532 { "symlink", 533 SymlinkCmd, 534 "existing-item link-item", 535 "creates a symbolic link on the remote host", 536 kCmdHidden | kCmdMustBeConnected | kCompleteRemoteFile, 537 2, 2, 538 }, 539 { "type", 540 TypeCmd, 541 "[ascii | binary | image]", 542 "sets file transfer type (one of 'ascii' or 'binary')", 543 kCmdMustBeConnected, 544 0, 1, 545 }, 546 { "umask", 547 UmaskCmd, 548 "mask", 549 "sets the process umask on remote host", 550 kCmdMustBeConnected, 551 1, 1, 552 }, 553 { "version", 554 (CmdProc) VersionCmd, 555 "", 556 "prints version information", 557 0, 558 kNoMin, kNoMax, 559 }, 560 }; 561 562 size_t gNumCommands = ((size_t) (sizeof(gCommands) / sizeof(Command))); 563 564 /* eof */ 565