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