xref: /openbsd/usr.bin/mail/cmdtab.c (revision 73471bf0)
1 /*	$OpenBSD: cmdtab.c,v 1.13 2009/10/27 23:59:40 deraadt Exp $	*/
2 /*	$NetBSD: cmdtab.c,v 1.7 1996/12/28 07:10:59 tls Exp $	*/
3 
4 /*
5  * Copyright (c) 1980, 1993
6  *	The Regents of the University of California.  All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 
33 #include "def.h"
34 #include "extern.h"
35 
36 /*
37  * Mail -- a mail program
38  *
39  * Define all of the command names and bindings.
40  */
41 typedef int (*cfunc_t)(void *);
42 const struct cmd cmdtab[] = {
43 	/* 						msgmask	msgflag	 */
44 	/* command	function	argtype		result	& mask	 */
45 	/* -------	--------	-------		-------	-------- */
46 	{ "next",	{ next },	NDMLIST,	0,	MMNDEL },
47 	{ "alias",	{ group },	M|RAWLIST,	0,	1000 },
48 	{ "print",	{ type },	MSGLIST,	0,	MMNDEL },
49 	{ "type",	{ type },	MSGLIST,	0,	MMNDEL },
50 	{ "Type",	{ Type },	MSGLIST,	0,	MMNDEL },
51 	{ "Print",	{ Type },	MSGLIST,	0,	MMNDEL },
52 	{ "visual",	{ visual },	I|MSGLIST,	0,	MMNORM },
53 	{ "top",	{ top },	MSGLIST,	0,	MMNDEL },
54 	{ "touch",	{ stouch },	W|MSGLIST,	0,	MMNDEL },
55 	{ "preserve",	{ preserve },	W|MSGLIST,	0,	MMNDEL },
56 	{ "delete",	{ deletecmd },	W|P|MSGLIST,	0,	MMNDEL },
57 	{ "dp",		{ deltype },	W|MSGLIST,	0,	MMNDEL },
58 	{ "dt",		{ deltype },	W|MSGLIST,	0,	MMNDEL },
59 	{ "undelete",	{ undeletecmd }, P|MSGLIST,	MDELETED,MMNDEL },
60 	{ "unset",	{ unset },	M|RAWLIST,	1,	1000 },
61 	{ "mail",	{ sendmail },	R|M|I|STRLIST,	0,	0 },
62 	{ "mbox",	{ mboxit },	W|MSGLIST,	0,	0 },
63 	{ "pipe",	{ (cfunc_t)pipeit }, MSGLIST|STRLIST,0,	MMNDEL },
64 	{ "|",	  	{ (cfunc_t)pipeit }, MSGLIST|STRLIST,0,	MMNDEL },
65 	{ "more",	{ more },	MSGLIST,	0,	MMNDEL },
66 	{ "page",	{ more },	MSGLIST,	0,	MMNDEL },
67 	{ "More",	{ More },	MSGLIST,	0,	MMNDEL },
68 	{ "Page",	{ More },	MSGLIST,	0,	MMNDEL },
69 	{ "unread",	{ unread },	MSGLIST,	0,	MMNDEL },
70 	{ "Unread",	{ unread },	MSGLIST,	0,	MMNDEL },
71 	{ "!",		{ shell },	I|STRLIST,	0,	0 },
72 	{ "copy",	{ copycmd },	M|STRLIST,	0,	0 },
73 	{ "chdir",	{ schdir },	M|RAWLIST,	0,	1 },
74 	{ "cd",		{ schdir },	M|RAWLIST,	0,	1 },
75 	{ "save",	{ save },	STRLIST,	0,	0 },
76 	{ "source",	{ source },	M|RAWLIST,	1,	1 },
77 	{ "set",	{ set },	M|RAWLIST,	0,	1000 },
78 	{ "shell",	{ dosh },	I|NOLIST,	0,	0 },
79 	{ "version",	{ pversion },	M|NOLIST,	0,	0 },
80 	{ "group",	{ group },	M|RAWLIST,	0,	1000 },
81 	{ "write",	{ swrite },	STRLIST,	0,	0 },
82 	{ "from",	{ from },	MSGLIST,	0,	MMNORM },
83 	{ "file",	{ file },	T|M|RAWLIST,	0,	1 },
84 	{ "folder",	{ file },	T|M|RAWLIST,	0,	1 },
85 	{ "folders",	{ folders },	T|M|STRLIST,	0,	0 },
86 	{ "?",		{ help },	M|NOLIST,	0,	0 },
87 	{ "z",		{ scroll },	M|STRLIST,	0,	0 },
88 	{ "headers",	{ headers },	MSGLIST,	0,	MMNDEL },
89 	{ "help",	{ help },	M|NOLIST,	0,	0 },
90 	{ "=",		{ pdot },	NOLIST,		0,	0 },
91 	{ "Reply",	{ Respond },	R|I|MSGLIST,	0,	MMNDEL },
92 	{ "Respond",	{ Respond },	R|I|MSGLIST,	0,	MMNDEL },
93 	{ "reply",	{ respond },	R|I|MSGLIST,	0,	MMNDEL },
94 	{ "respond",	{ respond },	R|I|MSGLIST,	0,	MMNDEL },
95 	{ "edit",	{ editor },	I|MSGLIST,	0,	MMNORM },
96 	{ "echo",	{ echo },	M|RAWLIST,	0,	1000 },
97 	{ "quit",	{ quitcmd },	NOLIST,		0,	0 },
98 	{ "list",	{ pcmdlist },	M|NOLIST,	0,	0 },
99 	{ "xit",	{ rexit },	M|NOLIST,	0,	0 },
100 	{ "exit",	{ rexit },	M|NOLIST,	0,	0 },
101 	{ "size",	{ messize },	MSGLIST,	0,	MMNDEL },
102 	{ "hold",	{ preserve },	W|MSGLIST,	0,	MMNDEL },
103 	{ "if",		{ ifcmd },	F|M|RAWLIST,	1,	1 },
104 	{ "else",	{ elsecmd },	F|M|RAWLIST,	0,	0 },
105 	{ "endif",	{ endifcmd },	F|M|RAWLIST,	0,	0 },
106 	{ "alternates",	{ alternates },	M|RAWLIST,	0,	1000 },
107 	{ "ignore",	{ igfield },	M|RAWLIST,	0,	1000 },
108 	{ "discard",	{ igfield },	M|RAWLIST,	0,	1000 },
109 	{ "retain",	{ retfield },	M|RAWLIST,	0,	1000 },
110 	{ "saveignore",	{ saveigfield }, M|RAWLIST,	0,	1000 },
111 	{ "savediscard",{ saveigfield }, M|RAWLIST,	0,	1000 },
112 	{ "saveretain",	{ saveretfield }, M|RAWLIST,	0,	1000 },
113 #if 0
114 	{ "Header",	{ Header },	STRLIST,	0,	1000 },
115 #endif
116 	{ "#",		{ null },	M|NOLIST,	0,	0 },
117 	{ "inc",	{ inc },	T|NOLIST,	0,	0 },
118 	{ "new",	{ marknew },	MSGLIST,	0,	MMNDEL },
119 	{ 0,		{ 0 },		0,		0,	0 }
120 };
121