dispatch.c revision 20484
1121941Sphk/*
2121941Sphk * The new sysinstall program.
3121941Sphk *
4121941Sphk * This is probably the last program in the `sysinstall' line - the next
5121941Sphk * generation being essentially a complete rewrite.
6121941Sphk *
7121941Sphk * $Id: dispatch.c,v 1.6 1996/11/04 12:56:20 jkh Exp $
8121941Sphk *
9121941Sphk * Copyright (c) 1995
10121941Sphk *	Jordan Hubbard.  All rights reserved.
11121941Sphk *
12121941Sphk * Redistribution and use in source and binary forms, with or without
13121941Sphk * modification, are permitted provided that the following conditions
14121941Sphk * are met:
15121941Sphk * 1. Redistributions of source code must retain the above copyright
16121941Sphk *    notice, this list of conditions and the following disclaimer,
17121941Sphk *    verbatim and that no modifications are made prior to this
18179413Sed *    point in the file.
19121941Sphk * 2. Redistributions in binary form must reproduce the above copyright
20121941Sphk *    notice, this list of conditions and the following disclaimer in the
21121941Sphk *    documentation and/or other materials provided with the distribution.
22121941Sphk *
23121941Sphk * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND
24121941Sphk * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25140966Sphk * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26121941Sphk * ARE DISCLAIMED.  IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE
27121941Sphk * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28121941Sphk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29121941Sphk * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION)
30140966Sphk * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31121941Sphk * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32130585Sphk * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33121941Sphk * SUCH DAMAGE.
34121941Sphk *
35121941Sphk */
36121941Sphk
37140966Sphk#include "sysinstall.h"
38121941Sphk#include <ctype.h>
39121941Sphk
40140966Sphkstatic struct _word {
41121941Sphk    char *name;
42140966Sphk    int (*handler)(dialogMenuItem *self);
43121941Sphk} resWords[] = {
44140966Sphk    { "configAnonFTP",		configAnonFTP		},
45121941Sphk    { "configApache",		configApache		},
46141616Sphk    { "configRouter",		configRouter		},
47121941Sphk    { "configNFSServer",	configNFSServer		},
48121941Sphk    { "configSamba",		configSamba		},
49121941Sphk    { "configPackages",		configPackages		},
50121941Sphk    { "diskPartitionEditor",	diskPartitionEditor	},
51121941Sphk    { "diskPartitionWrite",	diskPartitionWrite	},
52121941Sphk    { "diskLabelEditor",	diskLabelEditor		},
53121941Sphk    { "diskLabelCommit",	diskLabelCommit		},
54121941Sphk    { "distReset",		distReset		},
55121941Sphk    { "distSetDeveloper",	distSetDeveloper	},
56121941Sphk    { "distSetXDeveloper",	distSetXDeveloper	},
57121941Sphk    { "distSetKernDeveloper",	distSetKernDeveloper	},
58121941Sphk    { "distSetUser",		distSetUser		},
59121941Sphk    { "distSetXUser",		distSetXUser		},
60121941Sphk    { "distSetMinimum",		distSetMinimum		},
61128678Sphk    { "distSetEverything",	distSetEverything	},
62128678Sphk    { "distSetDES",		distSetDES		},
63128678Sphk    { "distSetSrc",		distSetSrc		},
64140966Sphk    { "distSetXF86",		distSetXF86		},
65140966Sphk    { "distExtractAll",		distExtractAll		},
66140966Sphk    { "docBrowser",		docBrowser		},
67140966Sphk    { "docShowDocument",	docShowDocument		},
68140966Sphk    { "installCommit",		installCommit		},
69128678Sphk    { "installExpress",		installExpress		},
70123494Sphk    { "installUpgrade",		installUpgrade		},
71140966Sphk    { "installFixup",		installFixup		},
72128678Sphk    { "installFilesystems",	installFilesystems	},
73123494Sphk    { "mediaSetCDROM",		mediaSetCDROM		},
74140966Sphk    { "mediaSetFloppy",		mediaSetFloppy		},
75128678Sphk    { "mediaSetDOS",		mediaSetDOS		},
76123494Sphk    { "mediaSetTape",		mediaSetTape		},
77123494Sphk    { "mediaSetFTP",		mediaSetFTP		},
78121941Sphk    { "mediaSetFTPActive",	mediaSetFTPActive	},
79121941Sphk    { "mediaSetFTPPassive",	mediaSetFTPPassive	},
80121941Sphk    { "mediaSetUFS",		mediaSetUFS		},
81140966Sphk    { "mediaSetNFS",		mediaSetNFS		},
82121941Sphk    { "mediaSetFTPUserPass",	mediaSetFTPUserPass	},
83121941Sphk    { "mediaSetCPIOVerbosity",	mediaSetCPIOVerbosity	},
84121941Sphk    { "mediaGetType",		mediaGetType		},
85121941Sphk    { "optionsEditor",		optionsEditor		},
86140966Sphk    { "addGroup",		userAddGroup		},
87140966Sphk    { "addUser",		userAddUser		},
88140966Sphk    { NULL, NULL },
89140966Sphk};
90140966Sphk
91140966Sphkstatic int
92140966Sphkcall_possible_resword(char *name, dialogMenuItem *value, int *status)
93140966Sphk{
94140966Sphk    int i, rval;
95140966Sphk
96140966Sphk    rval = 0;
97140966Sphk    for (i = 0; resWords[i].name; i++) {
98140966Sphk	if (!strcmp(name, resWords[i].name)) {
99140966Sphk	    *status = resWords[i].handler(value);
100140966Sphk	    rval = 1;
101140966Sphk	    break;
102140966Sphk	}
103140966Sphk    }
104140966Sphk    return rval;
105140966Sphk}
106140966Sphk
107140966Sphk/* For a given string, call it or spit out an undefined command diagnostic */
108140966Sphkint
109140966SphkdispatchCommand(char *str)
110140966Sphk{
111140966Sphk    int i;
112140966Sphk    char *cp;
113140966Sphk
114140966Sphk    if (!str || !*str) {
115130585Sphk	msgConfirm("Null or zero-length string passed to dispatchCommand");
116121941Sphk	return DITEM_FAILURE;
117121941Sphk    }
118123494Sphk    /* A command might be a pathname if it's encoded in argv[0], as we also support */
119140966Sphk    if (index(str, '=')) {
120121941Sphk	variable_set(str);
121121941Sphk	return DITEM_SUCCESS;
122140966Sphk    }
123140966Sphk    else if ((cp = index(str, '/')) != NULL)
124121941Sphk	str = cp + 1;
125121941Sphk    if (!call_possible_resword(str, NULL, &i)) {
126121941Sphk	msgConfirm("No such command: %s", str);
127123494Sphk	return DITEM_FAILURE;
128121941Sphk    }
129121941Sphk    return i;
130121941Sphk}
131123494Sphk