This is hashtable.h in view mode; [Download] [Up]
/* * $Id: hashtable.h,v 2.30 1996/10/15 20:16:35 hzoli Exp $ * * hashtable.h - header file for hash table handling code * * This file is part of zsh, the Z shell. * * Copyright (c) 1992-1996 Paul Falstad * All rights reserved. * * Permission is hereby granted, without written agreement and without * license or royalty fees, to use, copy, modify, and distribute this * software and to distribute modified versions of this software for any * purpose, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. * * In no event shall Paul Falstad or the Zsh Development Group be liable * to any party for direct, indirect, special, incidental, or consequential * damages arising out of the use of this software and its documentation, * even if Paul Falstad and the Zsh Development Group have been advised of * the possibility of such damage. * * Paul Falstad and the Zsh Development Group specifically disclaim any * warranties, including, but not limited to, the implied warranties of * merchantability and fitness for a particular purpose. The software * provided hereunder is on an "as is" basis, and Paul Falstad and the * Zsh Development Group have no obligation to provide maintenance, * support, updates, enhancements, or modifications. * */ /* Nodes for reserved word hash table */ #ifdef GLOBALS struct reswd reswds[] = { {NULL, "!", 0, BANG}, {NULL, "[[", 0, DINBRACK}, {NULL, "{", 0, INBRACE}, {NULL, "}", 0, OUTBRACE}, {NULL, "case", 0, CASE}, {NULL, "coproc", 0, COPROC}, {NULL, "do", 0, DO}, {NULL, "done", 0, DONE}, {NULL, "elif", 0, ELIF}, {NULL, "else", 0, ELSE}, {NULL, "end", 0, ZEND}, {NULL, "esac", 0, ESAC}, {NULL, "fi", 0, FI}, {NULL, "for", 0, FOR}, {NULL, "foreach", 0, FOREACH}, {NULL, "function", 0, FUNC}, {NULL, "if", 0, IF}, {NULL, "nocorrect", 0, NOCORRECT}, {NULL, "repeat", 0, REPEAT}, {NULL, "select", 0, SELECT}, {NULL, "then", 0, THEN}, {NULL, "time", 0, TIME}, {NULL, "until", 0, UNTIL}, {NULL, "while", 0, WHILE}, {NULL, NULL} }; #else extern struct reswd reswds[]; #endif /* Nodes for special parameters for parameter hash table */ #ifdef GLOBALS # ifdef HAVE_UNION_INIT # define BR(X) {X} struct param # else # define BR(X) X struct iparam { struct hashnode *next; char *nam; /* hash data */ int flags; /* PM_* flags (defined in zsh.h) */ void *value; void (*func1) _((void)); /* set func */ char *(*func2) _((void)); /* get func */ int ct; /* output base or field width */ void *data; /* used by getfns */ char *env; /* location in environment, if exported */ char *ename; /* name of corresponding environment var */ Param old; /* old struct for use with local */ int level; /* if (old != NULL), level of localness */ } # endif special_params[] ={ #define SFN(X) BR(((void (*)_((Param, char *)))(X))) #define GFN(X) BR(((char *(*)_((Param)))(X))) #define IPDEF1(A,B,C,D) {NULL,A,PM_INTEGER|PM_SPECIAL|D,BR(NULL),SFN(C),GFN(B),10,NULL,NULL,NULL,NULL,0} IPDEF1("#", poundgetfn, nullsetfn, PM_READONLY), IPDEF1("ERRNO", errnogetfn, nullsetfn, PM_READONLY), IPDEF1("GID", gidgetfn, gidsetfn, PM_DONTIMPORT), IPDEF1("EGID", egidgetfn, egidsetfn, PM_DONTIMPORT), IPDEF1("HISTSIZE", histsizegetfn, histsizesetfn, 0), IPDEF1("RANDOM", randomgetfn, randomsetfn, 0), IPDEF1("SECONDS", secondsgetfn, secondssetfn, 0), IPDEF1("UID", uidgetfn, uidsetfn, PM_DONTIMPORT), IPDEF1("EUID", euidgetfn, euidsetfn, PM_DONTIMPORT), IPDEF1("TTYIDLE", ttyidlegetfn, nullsetfn, PM_READONLY), #define IPDEF2(A,B,C,D) {NULL,A,PM_SCALAR|PM_SPECIAL|D,BR(NULL),BR(C),BR(B),0,NULL,NULL,NULL,NULL,0} IPDEF2("USERNAME", usernamegetfn, usernamesetfn, PM_DONTIMPORT), IPDEF2("-", dashgetfn, nullsetfn, PM_READONLY), IPDEF2("histchars", histcharsgetfn, histcharssetfn, PM_DONTIMPORT), IPDEF2("HOME", homegetfn, homesetfn, 0), IPDEF2("TERM", termgetfn, termsetfn, 0), IPDEF2("WORDCHARS", wordcharsgetfn, wordcharssetfn, 0), IPDEF2("IFS", ifsgetfn, ifssetfn, PM_DONTIMPORT), IPDEF2("_", underscoregetfn, nullsetfn, PM_READONLY), #ifdef LC_ALL #define LCIPDEF(A,B) {NULL,A,PM_SCALAR|PM_SPECIAL|PM_UNSET,BR(NULL),BR(lcsetfn),BR(strgetfn),0,(void *)B,NULL,NULL,NULL,0} IPDEF2("LANG", strgetfn, langsetfn, PM_UNSET), IPDEF2("LC_ALL", strgetfn, lc_allsetfn, PM_UNSET), #ifdef LC_COLLATE LCIPDEF("LC_COLLATE", LC_COLLATE), #endif #ifdef LC_CTYPE LCIPDEF("LC_CTYPE", LC_CTYPE), #endif #ifdef LC_MESSAGES LCIPDEF("LC_MESSAGES", LC_MESSAGES), #endif #ifdef LC_TIME LCIPDEF("LC_TIME", LC_TIME), #endif #endif #define IPDEF4(A,B) {NULL,A,PM_INTEGER|PM_READONLY|PM_SPECIAL,BR(NULL),BR(nullsetfn),GFN(intvargetfn),10,(void *)B,NULL,NULL,NULL,0} IPDEF4("!", &lastpid), IPDEF4("$", &mypid), IPDEF4("?", &lastval), IPDEF4("LINENO", &lineno), IPDEF4("PPID", &ppid), #define IPDEF5(A,B,F) {NULL,A,PM_INTEGER|PM_SPECIAL,BR(NULL),SFN(F),GFN(intvargetfn),10,(void *)B,NULL,NULL,NULL,0} IPDEF5("COLUMNS", &columns, zlevarsetfn), IPDEF5("LINES", &lines, zlevarsetfn), IPDEF5("OPTIND", &zoptind, intvarsetfn), IPDEF5("SHLVL", &shlvl, intvarsetfn), #define IPDEF6(A,B) {NULL,A,PM_SCALAR|PM_READONLY|PM_SPECIAL,BR(NULL),SFN(nullsetfn),BR(strvargetfn),0,(void *)B,NULL,NULL,NULL,0} IPDEF6("PWD", &pwd), #define IPDEF7(A,B) {NULL,A,PM_SCALAR|PM_SPECIAL,BR(NULL),BR(strvarsetfn),BR(strvargetfn),0,(void *)B,NULL,NULL,NULL,0} IPDEF7("OLDPWD", &oldpwd), IPDEF7("OPTARG", &zoptarg), IPDEF7("NULLCMD", &nullcmd), IPDEF7("POSTEDIT", &postedit), IPDEF7("READNULLCMD", &readnullcmd), IPDEF7("RPROMPT", &rprompt), IPDEF7("PS1", &prompt), IPDEF7("PS2", &prompt2), IPDEF7("PS3", &prompt3), IPDEF7("PS4", &prompt4), IPDEF7("RPS1", &rprompt), IPDEF7("SPROMPT", &sprompt), IPDEF7("0", &argzero), #define IPDEF8(A,B,C) {NULL,A,PM_SCALAR|PM_SPECIAL,BR(NULL),SFN(colonarrsetfn),GFN(colonarrgetfn),0,(void *)B,NULL,C,NULL,0} IPDEF8("CDPATH", &cdpath, "cdpath"), IPDEF8("FIGNORE", &fignore, "fignore"), IPDEF8("FPATH", &fpath, "fpath"), IPDEF8("MAILPATH", &mailpath, "mailpath"), IPDEF8("WATCH", &watch, "watch"), IPDEF8("PATH", &path, "path"), IPDEF8("PSVAR", &psvar, "psvar"), #define IPDEF9(A,B,C) {NULL,A,PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT,BR(NULL),SFN(arrvarsetfn),GFN(arrvargetfn),0,(void *)B,NULL,C,NULL,0} IPDEF9("*", &pparams, NULL), IPDEF9("@", &pparams, NULL), {NULL, NULL}, /* The following parameters are not avaible in sh/ksh compatibility * * mode. All of these has sh compatible equivalents. */ IPDEF1("ARGC", poundgetfn, nullsetfn, PM_READONLY), IPDEF2("HISTCHARS", histcharsgetfn, histcharssetfn, PM_DONTIMPORT), IPDEF4("status", &lastval), IPDEF7("prompt", &prompt), IPDEF7("PROMPT", &prompt), IPDEF7("PROMPT2", &prompt2), IPDEF7("PROMPT3", &prompt3), IPDEF7("PROMPT4", &prompt4), IPDEF8("MANPATH", &manpath, "manpath"), IPDEF9("argv", &pparams, NULL), IPDEF9("fignore", &fignore, "FIGNORE"), IPDEF9("cdpath", &cdpath, "CDPATH"), IPDEF9("fpath", &fpath, "FPATH"), IPDEF9("mailpath", &mailpath, "MAILPATH"), IPDEF9("manpath", &manpath, "MANPATH"), IPDEF9("watch", &watch, "WATCH"), IPDEF9("path", &path, "PATH"), IPDEF9("psvar", &psvar, "PSVAR"), {NULL, NULL} }; # undef BR #else extern struct param special_params[]; #endif /* Builtin function numbers; used by handler functions that handle more * * than one builtin. Note that builtins such as compctl, that are not * * overloaded, don't get a number. */ #define BIN_TYPESET 0 #define BIN_BG 1 #define BIN_FG 2 #define BIN_JOBS 3 #define BIN_WAIT 4 #define BIN_DISOWN 5 #define BIN_BREAK 6 #define BIN_CONTINUE 7 #define BIN_EXIT 8 #define BIN_RETURN 9 #define BIN_CD 10 #define BIN_POPD 11 #define BIN_PUSHD 12 #define BIN_PRINT 13 #define BIN_EVAL 14 #define BIN_SCHED 15 #define BIN_FC 16 #define BIN_PUSHLINE 17 #define BIN_LOGOUT 18 #define BIN_TEST 19 #define BIN_BRACKET 20 #define BIN_EXPORT 21 #define BIN_ECHO 22 #define BIN_DISABLE 23 #define BIN_ENABLE 24 /* These currently depend on being 0 and 1. */ #define BIN_SETOPT 0 #define BIN_UNSETOPT 1 #define NULLBINCMD ((int (*) _((char *,char **,char *,int))) 0) #define PREFIX(X,Y) {NULL,X,Y | BINF_PREFIX, NULLBINCMD, 0, 0, 0, NULL, NULL}, /* Nodes for builtin function hash table */ #ifdef GLOBALS struct builtin builtins[] = { PREFIX("-", BINF_DASH) PREFIX("builtin", BINF_BUILTIN) PREFIX("command", BINF_COMMAND) PREFIX("exec", BINF_EXEC) PREFIX("noglob", BINF_NOGLOB) {NULL, "[", 0, bin_test, 0, -1, BIN_BRACKET, NULL, NULL}, {NULL, ".", BINF_PSPECIAL, bin_dot, 1, -1, 0, NULL, NULL}, {NULL, ":", BINF_PSPECIAL, bin_true, 0, -1, 0, NULL, NULL}, {NULL, "alias", BINF_MAGICEQUALS, bin_alias, 0, -1, 0, "Lgmr", NULL}, {NULL, "autoload", BINF_TYPEOPTS, bin_functions, 0, -1, 0, "t", "u"}, {NULL, "bg", 0, bin_fg, 0, -1, BIN_BG, NULL, NULL}, {NULL, "bindkey", 0, bin_bindkey, 0, -1, 0, "asvemdr", NULL}, {NULL, "break", BINF_PSPECIAL, bin_break, 0, 1, BIN_BREAK, NULL, NULL}, {NULL, "bye", 0, bin_break, 0, 1, BIN_EXIT, NULL, NULL}, {NULL, "cd", 0, bin_cd, 0, 2, BIN_CD, NULL, NULL}, {NULL, "chdir", 0, bin_cd, 0, 2, BIN_CD, NULL, NULL}, {NULL, "compctl", 0, bin_compctl, 0, -1, 0, NULL, NULL}, {NULL, "continue", BINF_PSPECIAL, bin_break, 0, 1, BIN_CONTINUE, NULL, NULL}, {NULL, "declare", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "LRUZfilrtux", NULL}, {NULL, "dirs", 0, bin_dirs, 0, -1, 0, "v", NULL}, {NULL, "disable", 0, bin_enable, 0, -1, BIN_DISABLE, "afmr", NULL}, {NULL, "disown", 0, bin_fg, 0, -1, BIN_DISOWN, NULL, NULL}, {NULL, "echo", BINF_PRINTOPTS | BINF_ECHOPTS, bin_print, 0, -1, BIN_ECHO, "neE", "-"}, {NULL, "echotc", 0, bin_echotc, 1, -1, 0, NULL, NULL}, {NULL, "emulate", 0, bin_emulate, 1, 1, 0, "R", NULL}, {NULL, "enable", 0, bin_enable, 0, -1, BIN_ENABLE, "afmr", NULL}, {NULL, "eval", BINF_PSPECIAL, bin_eval, 0, -1, BIN_EVAL, NULL, NULL}, {NULL, "exit", BINF_PSPECIAL, bin_break, 0, 1, BIN_EXIT, NULL, NULL}, {NULL, "export", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, BIN_EXPORT, "LRUZfilrtu", "x"}, {NULL, "false", 0, bin_false, 0, -1, 0, NULL, NULL}, {NULL, "fc", BINF_FCOPTS, bin_fc, 0, -1, BIN_FC, "nlreIRWAdDfEim", NULL}, {NULL, "fg", 0, bin_fg, 0, -1, BIN_FG, NULL, NULL}, {NULL, "functions", BINF_TYPEOPTS, bin_functions, 0, -1, 0, "mtu", NULL}, {NULL, "getln", 0, bin_read, 0, -1, 0, "ecnAlE", "zr"}, {NULL, "getopts", 0, bin_getopts, 2, -1, 0, NULL, NULL}, {NULL, "hash", BINF_MAGICEQUALS, bin_hash, 0, -1, 0, "dfmr", NULL}, #ifdef ZSH_HASH_DEBUG {NULL, "hashinfo", 0, bin_hashinfo, 0, 0, 0, NULL, NULL}, #endif {NULL, "history", 0, bin_fc, 0, -1, BIN_FC, "nrdDfEim", "l"}, {NULL, "integer", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "lrtux", "i"}, {NULL, "jobs", 0, bin_fg, 0, -1, BIN_JOBS, "lpZrs", NULL}, {NULL, "kill", 0, bin_kill, 0, -1, 0, NULL, NULL}, {NULL, "let", 0, bin_let, 1, -1, 0, NULL, NULL}, {NULL, "limit", 0, bin_limit, 0, -1, 0, "sh", NULL}, {NULL, "local", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "LRUZilrtu", NULL}, {NULL, "log", 0, bin_log, 0, 0, 0, NULL, NULL}, {NULL, "logout", 0, bin_break, 0, 1, BIN_LOGOUT, NULL, NULL}, #if defined(ZSH_MEM) & defined(ZSH_MEM_DEBUG) {NULL, "mem", 0, bin_mem, 0, 0, 0, "v", NULL}, #endif {NULL, "popd", 0, bin_cd, 0, 2, BIN_POPD, NULL, NULL}, {NULL, "print", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, "RDPnrslzNu0123456789pioOcm-", NULL}, {NULL, "pushd", 0, bin_cd, 0, 2, BIN_PUSHD, NULL, NULL}, {NULL, "pushln", BINF_PRINTOPTS, bin_print, 0, -1, BIN_PRINT, NULL, "-nz"}, {NULL, "pwd", 0, bin_pwd, 0, 0, 0, "r", NULL}, {NULL, "r", BINF_R, bin_fc, 0, -1, BIN_FC, "nrl", NULL}, {NULL, "read", 0, bin_read, 0, -1, 0, "rzu0123456789pkqecnAlE", NULL}, {NULL, "readonly", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "LRUZfiltux", "r"}, {NULL, "rehash", 0, bin_hash, 0, 0, 0, "df", "r"}, {NULL, "return", BINF_PSPECIAL, bin_break, 0, 1, BIN_RETURN, NULL, NULL}, {NULL, "sched", 0, bin_sched, 0, -1, 0, NULL, NULL}, {NULL, "set", BINF_PSPECIAL, bin_set, 0, -1, 0, NULL, NULL}, {NULL, "setopt", 0, bin_setopt, 0, -1, BIN_SETOPT, NULL, NULL}, {NULL, "shift", BINF_PSPECIAL, bin_shift, 0, -1, 0, NULL, NULL}, {NULL, "source", BINF_PSPECIAL, bin_dot, 1, -1, 0, NULL, NULL}, {NULL, "suspend", 0, bin_suspend, 0, 0, 0, "f", NULL}, {NULL, "test", 0, bin_test, 0, -1, BIN_TEST, NULL, NULL}, {NULL, "ttyctl", 0, bin_ttyctl, 0, 0, 0, "fu", NULL}, {NULL, "times", BINF_PSPECIAL, bin_times, 0, 0, 0, NULL, NULL}, {NULL, "trap", BINF_PSPECIAL, bin_trap, 0, -1, 0, NULL, NULL}, {NULL, "true", 0, bin_true, 0, -1, 0, NULL, NULL}, {NULL, "type", 0, bin_whence, 0, -1, 0, "ampf", "v"}, {NULL, "typeset", BINF_TYPEOPTS | BINF_MAGICEQUALS | BINF_PSPECIAL, bin_typeset, 0, -1, 0, "LRUZfilrtuxm", NULL}, {NULL, "ulimit", 0, bin_ulimit, 0, -1, 0, NULL, NULL}, {NULL, "umask", 0, bin_umask, 0, 1, 0, "S", NULL}, {NULL, "unalias", 0, bin_unhash, 1, -1, 0, "m", "a"}, {NULL, "unfunction", 0, bin_unhash, 1, -1, 0, "m", "f"}, {NULL, "unhash", 0, bin_unhash, 1, -1, 0, "adfm", NULL}, {NULL, "unlimit", 0, bin_unlimit, 0, -1, 0, "hs", NULL}, {NULL, "unset", BINF_PSPECIAL, bin_unset, 1, -1, 0, "fm", NULL}, {NULL, "unsetopt", 0, bin_setopt, 0, -1, BIN_UNSETOPT, NULL, NULL}, {NULL, "vared", 0, bin_vared, 1, 7, 0, NULL, NULL}, {NULL, "wait", 0, bin_fg, 0, -1, BIN_WAIT, NULL, NULL}, {NULL, "whence", 0, bin_whence, 0, -1, 0, "acmpvf", NULL}, {NULL, "where", 0, bin_whence, 0, -1, 0, "pm", "ca"}, {NULL, "which", 0, bin_whence, 0, -1, 0, "amp", "c"}, {NULL, NULL} }; #else extern struct builtin builtins[]; #endif
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.