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 */
41typedef int (*cfunc_t)(void *);
42const 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