1*d1e4d7ceSDavid van Moolenbroek /* $NetBSD: init.c,v 1.11 2013/01/22 19:28:00 christos Exp $ */ 2*d1e4d7ceSDavid van Moolenbroek 3*d1e4d7ceSDavid van Moolenbroek /*- 4*d1e4d7ceSDavid van Moolenbroek * Copyright (c) 1980, 1991, 1993 5*d1e4d7ceSDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*d1e4d7ceSDavid van Moolenbroek * 7*d1e4d7ceSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8*d1e4d7ceSDavid van Moolenbroek * modification, are permitted provided that the following conditions 9*d1e4d7ceSDavid van Moolenbroek * are met: 10*d1e4d7ceSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 11*d1e4d7ceSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 12*d1e4d7ceSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 13*d1e4d7ceSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 14*d1e4d7ceSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 15*d1e4d7ceSDavid van Moolenbroek * 3. Neither the name of the University nor the names of its contributors 16*d1e4d7ceSDavid van Moolenbroek * may be used to endorse or promote products derived from this software 17*d1e4d7ceSDavid van Moolenbroek * without specific prior written permission. 18*d1e4d7ceSDavid van Moolenbroek * 19*d1e4d7ceSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20*d1e4d7ceSDavid van Moolenbroek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*d1e4d7ceSDavid van Moolenbroek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*d1e4d7ceSDavid van Moolenbroek * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23*d1e4d7ceSDavid van Moolenbroek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24*d1e4d7ceSDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25*d1e4d7ceSDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*d1e4d7ceSDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27*d1e4d7ceSDavid van Moolenbroek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28*d1e4d7ceSDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*d1e4d7ceSDavid van Moolenbroek * SUCH DAMAGE. 30*d1e4d7ceSDavid van Moolenbroek */ 31*d1e4d7ceSDavid van Moolenbroek 32*d1e4d7ceSDavid van Moolenbroek #include <sys/cdefs.h> 33*d1e4d7ceSDavid van Moolenbroek #ifndef lint 34*d1e4d7ceSDavid van Moolenbroek #if 0 35*d1e4d7ceSDavid van Moolenbroek static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 5/31/93"; 36*d1e4d7ceSDavid van Moolenbroek #else 37*d1e4d7ceSDavid van Moolenbroek __RCSID("$NetBSD: init.c,v 1.11 2013/01/22 19:28:00 christos Exp $"); 38*d1e4d7ceSDavid van Moolenbroek #endif 39*d1e4d7ceSDavid van Moolenbroek #endif /* not lint */ 40*d1e4d7ceSDavid van Moolenbroek 41*d1e4d7ceSDavid van Moolenbroek #include <stdarg.h> 42*d1e4d7ceSDavid van Moolenbroek 43*d1e4d7ceSDavid van Moolenbroek #include "csh.h" 44*d1e4d7ceSDavid van Moolenbroek #include "extern.h" 45*d1e4d7ceSDavid van Moolenbroek 46*d1e4d7ceSDavid van Moolenbroek #define INF 1000 47*d1e4d7ceSDavid van Moolenbroek 48*d1e4d7ceSDavid van Moolenbroek struct biltins bfunc[] = 49*d1e4d7ceSDavid van Moolenbroek { 50*d1e4d7ceSDavid van Moolenbroek { "@", dolet, 0, INF }, 51*d1e4d7ceSDavid van Moolenbroek { "alias", doalias, 0, INF }, 52*d1e4d7ceSDavid van Moolenbroek { "bg", dobg, 0, INF }, 53*d1e4d7ceSDavid van Moolenbroek { "break", dobreak, 0, 0 }, 54*d1e4d7ceSDavid van Moolenbroek { "breaksw", doswbrk, 0, 0 }, 55*d1e4d7ceSDavid van Moolenbroek { "case", dozip, 0, 1 }, 56*d1e4d7ceSDavid van Moolenbroek { "cd", dochngd, 0, INF }, 57*d1e4d7ceSDavid van Moolenbroek { "chdir", dochngd, 0, INF }, 58*d1e4d7ceSDavid van Moolenbroek { "continue", docontin, 0, 0 }, 59*d1e4d7ceSDavid van Moolenbroek { "default", dozip, 0, 0 }, 60*d1e4d7ceSDavid van Moolenbroek { "dirs", dodirs, 0, INF }, 61*d1e4d7ceSDavid van Moolenbroek { "echo", doecho, 0, INF }, 62*d1e4d7ceSDavid van Moolenbroek { "else", doelse, 0, INF }, 63*d1e4d7ceSDavid van Moolenbroek { "end", doend, 0, 0 }, 64*d1e4d7ceSDavid van Moolenbroek { "endif", dozip, 0, 0 }, 65*d1e4d7ceSDavid van Moolenbroek { "endsw", dozip, 0, 0 }, 66*d1e4d7ceSDavid van Moolenbroek { "eval", doeval, 0, INF }, 67*d1e4d7ceSDavid van Moolenbroek { "exec", execash, 1, INF }, 68*d1e4d7ceSDavid van Moolenbroek { "exit", doexit, 0, INF }, 69*d1e4d7ceSDavid van Moolenbroek { "fg", dofg, 0, INF }, 70*d1e4d7ceSDavid van Moolenbroek { "foreach", doforeach, 3, INF }, 71*d1e4d7ceSDavid van Moolenbroek { "glob", doglob, 0, INF }, 72*d1e4d7ceSDavid van Moolenbroek { "goto", dogoto, 1, 1 }, 73*d1e4d7ceSDavid van Moolenbroek { "hashstat", hashstat, 0, 0 }, 74*d1e4d7ceSDavid van Moolenbroek { "history", dohist, 0, 2 }, 75*d1e4d7ceSDavid van Moolenbroek { "if", doif, 1, INF }, 76*d1e4d7ceSDavid van Moolenbroek { "jobs", dojobs, 0, 1 }, 77*d1e4d7ceSDavid van Moolenbroek { "kill", dokill, 1, INF }, 78*d1e4d7ceSDavid van Moolenbroek { "limit", dolimit, 0, 3 }, 79*d1e4d7ceSDavid van Moolenbroek { "linedit", doecho, 0, INF }, 80*d1e4d7ceSDavid van Moolenbroek { "login", dologin, 0, 1 }, 81*d1e4d7ceSDavid van Moolenbroek { "logout", dologout, 0, 0 }, 82*d1e4d7ceSDavid van Moolenbroek { "nice", donice, 0, INF }, 83*d1e4d7ceSDavid van Moolenbroek { "nohup", donohup, 0, INF }, 84*d1e4d7ceSDavid van Moolenbroek { "notify", donotify, 0, INF }, 85*d1e4d7ceSDavid van Moolenbroek { "onintr", doonintr, 0, 2 }, 86*d1e4d7ceSDavid van Moolenbroek { "popd", dopopd, 0, INF }, 87*d1e4d7ceSDavid van Moolenbroek { "printf", doprintf, 1, INF }, 88*d1e4d7ceSDavid van Moolenbroek { "pushd", dopushd, 0, INF }, 89*d1e4d7ceSDavid van Moolenbroek { "rehash", dohash, 0, 0 }, 90*d1e4d7ceSDavid van Moolenbroek { "repeat", dorepeat, 2, INF }, 91*d1e4d7ceSDavid van Moolenbroek { "set", doset, 0, INF }, 92*d1e4d7ceSDavid van Moolenbroek { "setenv", dosetenv, 0, 2 }, 93*d1e4d7ceSDavid van Moolenbroek { "shift", shift, 0, 1 }, 94*d1e4d7ceSDavid van Moolenbroek { "source", dosource, 1, 2 }, 95*d1e4d7ceSDavid van Moolenbroek { "stop", dostop, 1, INF }, 96*d1e4d7ceSDavid van Moolenbroek { "suspend", dosuspend, 0, 0 }, 97*d1e4d7ceSDavid van Moolenbroek { "switch", doswitch, 1, INF }, 98*d1e4d7ceSDavid van Moolenbroek { "time", dotime, 0, INF }, 99*d1e4d7ceSDavid van Moolenbroek { "umask", doumask, 0, 1 }, 100*d1e4d7ceSDavid van Moolenbroek { "unalias", unalias, 1, INF }, 101*d1e4d7ceSDavid van Moolenbroek { "unhash", dounhash, 0, 0 }, 102*d1e4d7ceSDavid van Moolenbroek { "unlimit", dounlimit, 0, INF }, 103*d1e4d7ceSDavid van Moolenbroek { "unset", unset, 1, INF }, 104*d1e4d7ceSDavid van Moolenbroek { "unsetenv", dounsetenv, 1, INF }, 105*d1e4d7ceSDavid van Moolenbroek { "wait", dowait, 0, 0 }, 106*d1e4d7ceSDavid van Moolenbroek { "which", dowhich, 1, INF }, 107*d1e4d7ceSDavid van Moolenbroek { "while", dowhile, 1, INF } 108*d1e4d7ceSDavid van Moolenbroek }; 109*d1e4d7ceSDavid van Moolenbroek int nbfunc = sizeof(bfunc) / sizeof(*bfunc); 110*d1e4d7ceSDavid van Moolenbroek 111*d1e4d7ceSDavid van Moolenbroek struct srch srchn[] = 112*d1e4d7ceSDavid van Moolenbroek { 113*d1e4d7ceSDavid van Moolenbroek { "@", T_LET }, 114*d1e4d7ceSDavid van Moolenbroek { "break", T_BREAK }, 115*d1e4d7ceSDavid van Moolenbroek { "breaksw", T_BRKSW }, 116*d1e4d7ceSDavid van Moolenbroek { "case", T_CASE }, 117*d1e4d7ceSDavid van Moolenbroek { "default", T_DEFAULT }, 118*d1e4d7ceSDavid van Moolenbroek { "else", T_ELSE }, 119*d1e4d7ceSDavid van Moolenbroek { "end", T_END }, 120*d1e4d7ceSDavid van Moolenbroek { "endif", T_ENDIF }, 121*d1e4d7ceSDavid van Moolenbroek { "endsw", T_ENDSW }, 122*d1e4d7ceSDavid van Moolenbroek { "exit", T_EXIT }, 123*d1e4d7ceSDavid van Moolenbroek { "foreach", T_FOREACH }, 124*d1e4d7ceSDavid van Moolenbroek { "goto", T_GOTO }, 125*d1e4d7ceSDavid van Moolenbroek { "if", T_IF }, 126*d1e4d7ceSDavid van Moolenbroek { "label", T_LABEL }, 127*d1e4d7ceSDavid van Moolenbroek { "set", T_SET }, 128*d1e4d7ceSDavid van Moolenbroek { "switch", T_SWITCH }, 129*d1e4d7ceSDavid van Moolenbroek { "while", T_WHILE } 130*d1e4d7ceSDavid van Moolenbroek }; 131*d1e4d7ceSDavid van Moolenbroek int nsrchn = sizeof(srchn) / sizeof(*srchn); 132