diff options
Diffstat (limited to 'release/sysinstall/decode.c')
-rw-r--r-- | release/sysinstall/decode.c | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/release/sysinstall/decode.c b/release/sysinstall/decode.c deleted file mode 100644 index 68f97af..0000000 --- a/release/sysinstall/decode.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * The new sysinstall program. - * - * This is probably the last program in the `sysinstall' line - the next - * generation being essentially a complete rewrite. - * - * $Id: decode.c,v 1.6.2.5 1995/11/03 12:02:26 jkh Exp $ - * - * Copyright (c) 1995 - * Jordan Hubbard. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer, - * verbatim and that no modifications are made prior to this - * point in the file. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Jordan Hubbard - * for the FreeBSD Project. - * 4. The name of Jordan Hubbard or the FreeBSD project may not be used to - * endorse or promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY JORDAN HUBBARD ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL JORDAN HUBBARD OR HIS PETS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, LIFE OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ - -#include "sysinstall.h" - -DMenuItem * -decode(DMenu *menu, char *name) -{ - DMenuItem *tmp; - - for (tmp = menu->items; tmp->title; tmp++) - if (!strcmp(name, tmp->title)) - break; - if (!tmp->title) - return NULL; - return tmp; -} - -int -dispatch(DMenuItem *tmp, char *name) -{ - int val = RET_SUCCESS; - - switch (tmp->type) { - /* We want to simply display a help file */ - case DMENU_DISPLAY_FILE: - systemDisplayHelp((char *)tmp->ptr); - break; - - /* It's a sub-menu; recurse on it */ - case DMENU_SUBMENU: - (void)dmenuOpenSimple((DMenu *)tmp->ptr); - break; - - /* Execute it as a direct exec */ - case DMENU_SYSTEM_COMMAND: - (void)systemExecute((char *)tmp->ptr); - break; - - /* Same as above, but execute it in a prgbox */ - case DMENU_SYSTEM_COMMAND_BOX: - use_helpfile(NULL); - use_helpline("Select OK to dismiss this dialog"); - dialog_prgbox(tmp->title, (char *)tmp->ptr, 22, 76, 1, 1); - dialog_clear(); - break; - - case DMENU_CALL: - val = (((int (*)())tmp->ptr)(name)); - break; - - case DMENU_CANCEL: - val = RET_DONE; - break; - - case DMENU_SET_VARIABLE: - variable_set((char *)tmp->ptr); - msgInfo("Set %s", tmp->ptr); - break; - - case DMENU_SET_FLAG: - *((unsigned int *)tmp->ptr) |= tmp->parm; - break; - - case DMENU_SET_VALUE: - *((unsigned int *)tmp->ptr) = tmp->parm; - break; - - case DMENU_NOP: - break; - - default: - msgFatal("Don't know how to deal with menu type %d", tmp->type); - } - return val; -} - -int -decode_and_dispatch_multiple(DMenu *menu, char *names) -{ - DMenuItem *tmp; - int errors = 0; - - string_prune(names); - names = string_skipwhite(names); - - /* KLUDGE ALERT: - * To make multi-choice flag arrays work this assumes that ALL items in - * a menu appear in the same mask!! If you need mixed masks, use - * submenus. - */ - if (menu->items[0].type == DMENU_SET_FLAG) - *((unsigned int *)menu->items[0].ptr) = 0; - - while (names) { - char *cp; - - cp = index(names, '\n'); - if (cp) - *cp++ = 0; - /* Were no options actually selected? */ - if (!*names) - return FALSE; - if ((tmp = decode(menu, names)) != NULL) { - if (dispatch(tmp, names) != RET_SUCCESS) - ++errors; - } - else - msgFatal("Couldn't find a handler for item `%s' in menu `%s'!", - names, menu->title); - names = cp; - } - return errors; -} |