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