/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */ /* All Rights Reserved */ /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */ /* UNIX System Laboratories, Inc. */ /* The copyright notice above does not evidence any */ /* actual or intended publication of such source code. */ #ident "@(#)ksh:sh/msg.c 1.5.4.2" /* * UNIX shell * S. R. Bourne * Rewritten by David Korn * * AT&T Bell Laboratories * */ #include #include "defs.h" #include "sym.h" #include "builtins.h" #include "test.h" #include "timeout.h" #include "history.h" #ifdef MULTIBYTE #include "national.h" MSG e_version = "\n@(#)Version M-11/16/88f\0\n"; #else MSG e_version = "\n@(#)Version 11/16/88f\0\n"; #endif /* MULTIBYTE */ extern struct Bfunction sh_randnum; extern struct Bfunction sh_seconds; extern struct Bfunction line_numbers; extern struct Bfunction opt_indexs; /* error messages */ MSG e_timewarn = "\r\n\007shell will time out in 60 seconds"; MSG e_timeout = "timed out waiting for input"; MSG e_mailmsg = "you have mail in $_"; MSG e_query = "no query process"; MSG e_history = "no history file"; MSG e_option = "bad option(s)"; MSG e_space = "no space"; MSG e_argexp = "argument expected"; MSG e_bracket = "] missing"; MSG e_number = "bad number"; MSG e_nullset = "parameter null or not set"; MSG e_notset = "parameter not set"; MSG e_subst = "bad substitution"; MSG e_create = "cannot create"; MSG e_restricted = "restricted"; MSG e_fork = "cannot fork: too many processes"; MSG e_pexists = "process already exists"; MSG e_fexists = "file already exists"; MSG e_swap = "cannot fork: no swap space"; MSG e_pipe = "cannot make pipe"; MSG e_open = "cannot open"; MSG e_logout = "Use 'exit' to terminate this shell"; MSG e_arglist = "arg list too long"; MSG e_txtbsy = "text busy"; MSG e_toobig = "too big"; MSG e_exec = "cannot execute"; MSG e_pwd = "cannot access parent directories"; MSG e_found = " not found"; MSG e_flimit = "too many open files"; MSG e_ulimit = "exceeds allowable limit"; MSG e_subscript = "subscript out of range"; MSG e_nargs = "bad argument count"; MSG e_combo = "bad option combination"; MSG e_nosuchres = "no such resource"; MSG e_badscale = "Improper or unknown scale factor"; #ifdef ELIBACC /* shared library error messages */ MSG e_libacc = "can't access a needed shared library"; MSG e_libbad = "accessing a corrupted shared library"; MSG e_libscn = ".lib section in a.out corrupted"; MSG e_libmax = "attempting to link in too many libs"; #endif /* ELIBACC */ #ifdef EMULTIHOP MSG e_multihop = "multihop attempted"; #endif /* EMULTIHOP */ #ifdef ENAMETOOLONG MSG e_longname = "name too long"; #endif /* ENAMETOOLONG */ #ifdef ENOLINK MSG e_link = "remote link inactive"; #endif /* ENOLINK */ MSG e_access = "permission denied"; MSG e_direct = "bad directory"; MSG e_notdir = "not a directory"; MSG e_file = "bad file unit number"; MSG e_trap = "bad trap"; MSG e_readonly = "is read only"; MSG e_ident = "is not an identifier"; MSG e_aliname = "invalid alias name"; MSG e_testop = "unknown test operator"; MSG e_alias = " alias not found"; MSG e_aliasspc = "alias "; MSG e_function = "unknown function"; MSG e_format = "bad format"; MSG e_on = "on"; MSG e_off = "off"; MSG e_undefsym = "undefined symbols"; MSG e_getmap = "cannot get mapping"; MSG e_getvers = "cannot get versions"; MSG e_setmap = "cannot set mapping"; MSG e_setvpath = "cannot set vpath"; MSG e_invalidnm = "invalid name"; MSG e_no_access = "not accessible"; MSG e_nlorsemi = "newline or ;"; MSG e_builtexec = "/sbin/builtin_exec"; MSG e_write = "write"; MSG is_reserved = " is a reserved keyword"; MSG is_builtin = " is a shell builtin"; MSG is_spc_builtin = " is a special shell builtin"; MSG is_alias = " is an alias for "; MSG is_function = " is a function"; MSG is_xalias = " is an exported alias for "; MSG is_talias = " is a tracked alias for "; MSG is_xfunction = " is an exported function"; MSG is_ufunction = " is an undefined function"; MSG is_pathfound = " is found in PATH"; MSG is_ = " is "; MSG e_fnhdr = "\n{\n"; MSG e_runvi = "fc -e \"${VISUAL:-${EDITOR:-vi}}\" "; #ifdef JOBS # ifdef SIGTSTP MSG e_newtty = "Switching to new tty driver..."; MSG e_oldtty = "Reverting to old tty driver..."; MSG e_no_start = "Cannot start job control"; MSG e_no_jctl = "No job control"; MSG e_terminate = "You have stopped jobs"; # endif /*SIGTSTP */ MSG e_done = " Done"; MSG e_nlspace = "\n "; MSG e_Running = " Running"; MSG e_ambiguous = "Ambiguous"; MSG e_running = "You have running jobs"; MSG e_no_job = "no such job"; MSG e_no_proc = "no such process"; MSG e_killcolon = "kill: "; MSG e_jobusage = "Arguments must be %job or process ids"; MSG e_kill = "kill"; #endif /* JOBS */ MSG e_coredump = "(coredump)"; #ifdef DEVFD MSG e_devfd = "/dev/fd/"; #endif /* DEVFD */ #ifdef VPIX MSG e_vpix = "/vpix"; MSG e_vpixdir = "/usr/bin"; #endif /* VPIX */ #ifdef apollo MSG e_rootnode = "Bad root node specification"; MSG e_nover = "Version not defined"; MSG e_badver = "Unrecognized version"; #endif /* apollo */ #ifdef LDYNAMIC MSG e_badinlib = "Cannot inlib"; #endif /* LDYNAMIC */ #ifdef sgi MSG e_badmagic = "Program not supported by architecture"; #endif /* sgi */ /* string constants */ MSG test_unops = "LSVOGClaeohrwxdcbfugkpsnzt"; MSG e_heading = "Current option settings"; MSG e_nullstr = ""; MSG e_sptbnl = " \t\n"; MSG e_defpath = "/bin:/usr/bin:"; MSG e_defedit = "/bin/ed"; MSG e_colon = ": "; MSG e_minus = "-"; MSG e_endoffile = "end of file"; MSG e_unexpected = " unexpected"; MSG e_unmatched = " unmatched"; MSG e_unknown = ""; MSG e_atline = " at line "; MSG e_devnull = "/dev/null"; MSG e_traceprompt = "+ "; MSG e_supprompt = "# "; MSG e_stdprompt = "$ "; MSG e_profile = "${HOME:-.}/.profile"; MSG e_sysprofile = "/etc/profile"; MSG e_suidprofile = "/etc/suid_profile"; MSG e_crondir = "/var/spool/cron/atjobs"; #ifndef INT16 MSG e_prohibited = "login setuid/setgid shells prohibited"; #endif /* INT16 */ #ifdef SUID_EXEC MSG e_suidexec = "/etc/suid_exec"; #endif /* SUID_EXEC */ MSG e_devfdNN = "/dev/fd/+([0-9])"; MSG hist_fname = "/.sh_history"; MSG e_unlimited = "unlimited"; #ifdef ECHO_N MSG e_echobin = "/bin/echo"; MSG e_echoflag = "-R"; #endif /* ECHO_N */ MSG e_test = "test"; MSG e_dot = "."; MSG e_bltfn = "function "; MSG e_intbase = "base"; MSG e_envmarker = "A__z"; #ifdef FLOAT MSG e_precision = "precision"; #endif /* FLOAT */ #ifdef PDUBIN MSG e_setpwd = "PWD=`/usr/pdu/bin/pwd 2>/dev/null`"; #else MSG e_setpwd = "PWD=`/bin/pwd 2>/dev/null`"; #endif /* PDUBIN */ MSG e_real = "\nreal"; MSG e_user = "user"; MSG e_sys = "sys"; MSG e_command = "command"; MSG e_cant = ": Can't "; MSG e_remove = "remove "; MSG e_set = "set "; MSG e_hard = "hard "; MSG e_limit = "limit"; MSG e_malloc_freejobs = "malloc failed for freejobs list"; MSG e_jobs = "too many jobs"; MSG sc_hours = "hours"; MSG sc_minutes = "minutes"; MSG sc_megabytes = "megabytes"; MSG sc_seconds = "seconds"; MSG sc_kbytes = "kbytes"; #ifdef apollo # undef NULL # define NULL "" # define e_nullstr "" #endif /* apollo */ /* built in names */ const struct name_value node_names[] = { "PATH", NULL, 0, "PS1", NULL, 0, "PS2", "> ", N_FREE, #ifdef apollo "IFS", " \t\n", N_FREE, #else "IFS", e_sptbnl, N_FREE, #endif /* apollo */ "PWD", NULL, 0, "HOME", NULL, 0, "MAIL", NULL, 0, "REPLY", NULL, 0, "SHELL", "/bin/sh", N_FREE, "EDITOR", NULL, 0, #ifdef apollo "MAILCHECK", NULL, N_FREE|N_INTGER, "RANDOM", NULL, N_FREE|N_INTGER, #else "MAILCHECK", (char*)(&sh_mailchk), N_FREE|N_INTGER, "RANDOM", (char*)(&sh_randnum), N_FREE|N_INTGER|N_BLTNOD, #endif /* apollo */ "ENV", NULL, 0, "HISTFILE", NULL, 0, "HISTSIZE", NULL, 0, "FCEDIT", "/bin/ed", N_FREE, "CDPATH", NULL, 0, "MAILPATH", NULL, 0, "PS3", "#? ", N_FREE, "OLDPWD", NULL, 0, "VISUAL", NULL, 0, "COLUMNS", NULL, 0, "LINES", NULL, 0, #ifdef apollo "PPID", NULL, N_FREE|N_INTGER, "_", NULL, N_FREE|N_INDIRECT|N_EXPORT, "TMOUT", NULL, N_FREE|N_INTGER, "SECONDS", NULL, N_FREE|N_INTGER|N_BLTNOD, "ERRNO", NULL, N_FREE|N_INTGER, "LINENO", NULL, N_FREE|N_INTGER|N_BLTNOD, "OPTIND", NULL, N_FREE|N_INTGER, "OPTARG", NULL, N_FREE|N_INDIRECT, #else "PPID", (char*)(&sh.ppid), N_FREE|N_INTGER, "_", (char*)(&sh.lastarg), N_FREE|N_INDIRECT|N_EXPORT, "TMOUT", (char*)(&sh_timeout), N_FREE|N_INTGER, "SECONDS", (char*)(&sh_seconds), N_FREE|N_INTGER|N_BLTNOD, "ERRNO", NULL, N_FREE|N_INTGER, "LINENO", (char*)(&line_numbers), N_FREE|N_INTGER|N_BLTNOD, "OPTIND", (char*)(&opt_indexs), N_FREE|N_INTGER|N_BLTNOD|N_IMPORT, "OPTARG", NULL, N_FREE, #endif /* apollo */ "PS4", NULL, 0, "FPATH", NULL, 0, "LANG", NULL, 0, "LC_CTYPE", NULL, 0, #ifdef VPIX "DOSPATH", NULL, 0, "VPIXDIR", NULL, 0, #endif /* VPIX */ #ifdef ACCT "SHACCT", NULL, 0, #endif /* ACCT */ #ifdef MULTIBYTE "CSWIDTH", NULL, 0, #endif /* MULTIBYTE */ #ifdef apollo "SYSTYPE", NULL, 0, #endif /* apollo */ "_XPG", "0", N_FREE, "NOMSGSEVERITY","1", N_FREE, "NOMSGLABEL", "1", N_FREE, e_nullstr, NULL, 0 }; #ifdef VPIX const char *suffix_list[] = { ".com", ".exe", ".bat", e_nullstr }; #endif /* VPIX */ /* built in aliases - automatically exported */ const struct name_value alias_names[] = { #ifdef FS_3D "2d", "set -f;_2d ", N_FREE|N_EXPORT, #endif /* FS_3D */ "autoload", "typeset -fu", N_FREE|N_EXPORT, "chdir", "cd", N_FREE|N_EXPORT, "functions", "typeset -f", N_FREE|N_EXPORT, "history", "fc -l", N_FREE|N_EXPORT, "integer", "typeset -i", N_FREE|N_EXPORT, #ifdef POSIX "local", "typeset", N_FREE|N_EXPORT, #endif /* POSIX */ "nohup", "nohup ", N_FREE|N_EXPORT, "r", "fc -e -", N_FREE|N_EXPORT, #ifdef SIGTSTP "stop", "kill -STOP", N_FREE|N_EXPORT, "suspend", "kill -STOP $$", N_FREE|N_EXPORT, #endif /*SIGTSTP */ e_nullstr, NULL, 0 }; const struct name_value tracked_names[] = { "cat", "/bin/cat", N_FREE|N_EXPORT|T_FLAG, "chmod", "/bin/chmod", N_FREE|N_EXPORT|T_FLAG, "cc", "/bin/cc", N_FREE|N_EXPORT|T_FLAG, "cp", "/bin/cp", N_FREE|N_EXPORT|T_FLAG, "date", "/bin/date", N_FREE|N_EXPORT|T_FLAG, "ed", "/bin/ed", N_FREE|N_EXPORT|T_FLAG, #ifdef _bin_grep_ "grep", "/bin/grep", N_FREE|N_EXPORT|T_FLAG, #else # ifdef _usr_ucb_ "grep", "/usr/ucb/grep",N_FREE|N_EXPORT|T_FLAG, # endif /* _usr_ucb_ */ #endif /* _bin_grep */ #ifdef _usr_bin_lp "lp", "/usr/bin/lp", N_FREE|N_EXPORT|T_FLAG, #endif /* _usr_bin_lpr */ #ifdef _usr_bin_lpr "lpr", "/usr/bin/lpr", N_FREE|N_EXPORT|T_FLAG, #endif /* _usr_bin_lpr */ "ls", "/bin/ls", N_FREE|N_EXPORT|T_FLAG, "make", "/bin/make", N_FREE|N_EXPORT|T_FLAG, "mail", "/bin/mail", N_FREE|N_EXPORT|T_FLAG, "mv", "/bin/mv", N_FREE|N_EXPORT|T_FLAG, "pr", "/bin/pr", N_FREE|N_EXPORT|T_FLAG, "rm", "/bin/rm", N_FREE|N_EXPORT|T_FLAG, "sed", "/bin/sed", N_FREE|N_EXPORT|T_FLAG, "sh", "/bin/sh", N_FREE|N_EXPORT|T_FLAG, #ifdef _usr_bin_vi_ "vi", "/usr/bin/vi", N_FREE|N_EXPORT|T_FLAG, #else # ifdef _usr_ucb_ "vi", "/usr/ucb/vi", N_FREE|N_EXPORT|T_FLAG, # endif /* _usr_ucb_ */ #endif /* _usr_bin_vi_ */ "who", "/bin/who", N_FREE|N_EXPORT|T_FLAG, e_nullstr, NULL, 0 }; /* tables */ SYSTAB tab_reserved = { #ifdef POSIX {"!", NOTSYM}, #endif /* POSIX */ #ifdef NEWTEST {"[[", BTSTSYM}, #endif /* NEWTEST */ {"case", CASYM}, {"do", DOSYM}, {"done", ODSYM}, {"elif", EFSYM}, {"else", ELSYM}, {"esac", ESSYM}, {"fi", FISYM}, {"for", FORSYM}, {"function", PROCSYM}, {"if", IFSYM}, {"in", INSYM}, {"select", SELSYM}, {"then", THSYM}, {"time", TIMSYM}, {"until", UNSYM}, {"while", WHSYM}, {"{", BRSYM}, {"}", KTSYM}, {e_nullstr, 0}, }; /* * The signal numbers go in the low bits and the attributes go in the high bits */ SYSTAB sig_names = { #ifdef SIGABRT {"ABRT", (SIGABRT+1)|(SIGDONE<0 {"PWR", (SIGPWR+1)}, # endif #endif /* SIGPWR */ {"QUIT", (SIGQUIT+1)|((SIGCAUGHT|SIGIGNORE)<0 {_SGI_DMMX_s_powerfail, "Power fail", (SIGPWR+1)}, # endif #endif /* SIGPWR */ {_SGI_DMMX_s_memoryfault,"Memory fault", (SIGSEGV+1)}, #ifdef SIGSTOP {_SGI_DMMX_s_stopstop, "Stopped (SIGSTOP)", (SIGSTOP+1)}, #endif /* SIGSTOP */ {_SGI_DMMX_s_badsyscall,"Bad system call", (SIGSYS+1)}, {_SGI_DMMX_s_term, "Terminated", (SIGTERM+1)}, #ifdef SIGTINT # ifdef JOBS {_SGI_DMMX_s_intr, "Interrupt", (SIGTINT+1)}, # else {"", "", (SIGTINT+1)}, # endif /* JOBS */ #endif /* SIGTINT */ {_SGI_DMMX_s_tracetrap, "Trace/BPT trap", (SIGTRAP+1)}, #ifdef SIGTSTP {_SGI_DMMX_s_stoptstp, "Stopped (SIGTSTP)", (SIGTSTP+1)}, #endif /* SIGTSTP */ #ifdef SIGTTIN {_SGI_DMMX_s_stopttin, "Stopped (SIGTTIN)", (SIGTTIN+1)}, #endif /* SIGTTIN */ #ifdef SIGTTOU {_SGI_DMMX_s_stopttou, "Stopped (SIGTTOU)", (SIGTTOU+1)}, #endif /* SIGTTOU */ #ifdef SIGURG {_SGI_DMMX_s_sockintr, "Socket interrupt", (SIGURG+1)}, #endif /* SIGURG */ #ifdef SIGUSR1 {_SGI_DMMX_s_usrsig1, "User signal 1", (SIGUSR1+1)}, #endif /* SIGUSR1 */ #ifdef SIGUSR2 {_SGI_DMMX_s_usrsig2, "User signal 2", (SIGUSR2+1)}, #endif /* SIGUSR2 */ #ifdef SIGVTALRM {_SGI_DMMX_s_virtalarm, "Virtual time alarm", (SIGVTALRM+1)}, #endif /* SIGVTALRM */ #ifdef SIGWINCH {_SGI_DMMX_s_winsizechg,"Window size change", (SIGWINCH+1)}, #endif /* SIGWINCH */ #ifdef SIGXCPU {_SGI_DMMX_s_timelimit, "Exceeded CPU time limit", (SIGXCPU+1)}, #endif /* SIGXCPU */ #ifdef SIGXFSZ {_SGI_DMMX_s_sizelimit, "Exceeded file size limit", (SIGXFSZ+1)}, #endif /* SIGXFSZ */ #ifdef SIGLOST {_SGI_DMMX_s_resource, "Resources lost", (SIGLOST+1)}, #endif /* SIGLOST */ #ifdef SIGLAB {_SGI_DMMX_s_securitychg,"Security label changed", (SIGLAB+1)}, #endif /* SIGLAB */ {"", "", 0} }; SYSTAB tab_options= { {"allexport", Allexp}, {"bgnice", Bgnice}, {"emacs", Emacs}, {"errexit", Errflg}, {"gmacs", Gmacs}, {"ignoreeof", Noeof}, {"interactive", Intflg}, {"keyword", Keyflg}, {"markdirs", Markdir}, {"monitor", Monitor}, {"noexec", Noexec}, {"noclobber", Noclob}, {"noglob", Noglob}, {"nolog", Nolog}, {"nounset", Noset}, {"notify", Notify}, #ifdef apollo {"physical", Aphysical}, #endif /* apollo */ {"privileged", Privmod}, {"restricted", Rshflg}, {"trackall", Hashall}, {"verbose", Readpr}, {"vi", Editvi}, {"viraw", Viraw}, {"xtrace", Execpr}, {e_nullstr, 0} }; #ifdef _sys_resource_ # ifndef included_sys_time_ # include # endif # include /* needed for ulimit */ # define LIM_FSIZE RLIMIT_FSIZE # define LIM_DATA RLIMIT_DATA # define LIM_STACK RLIMIT_STACK # define LIM_CORE RLIMIT_CORE # define LIM_CPU RLIMIT_CPU # ifdef RLIMIT_RSS # define LIM_MAXRSS RLIMIT_RSS # endif /* RLIMIT_RSS */ #else # ifdef VLIMIT # include # endif /* VLIMIT */ #endif /* _sys_resource_ */ #ifdef LIM_CPU # define size_resource(a,b) ((a)|((b)<<11)) SYSMSGTAB limit_names = { {_SGI_DMMX_r_time, "time(seconds) ", size_resource(1,LIM_CPU)}, {_SGI_DMMX_r_file, "file(blocks) ", size_resource(512,LIM_FSIZE)}, {_SGI_DMMX_r_data, "data(kbytes) ", size_resource(1024,LIM_DATA)}, {_SGI_DMMX_r_stack, "stack(kbytes) ", size_resource(1024,LIM_STACK)}, # ifdef LIM_MAXRSS {_SGI_DMMX_r_memory, "memory(kbytes) ", size_resource(1024,LIM_MAXRSS)}, # else {_SGI_DMMX_r_memory, "memory(kbytes) ", size_resource(1024,0)}, # endif /* LIM_MAXRSS */ {_SGI_DMMX_r_coredump, "coredump(blocks) ", size_resource(512,LIM_CORE)}, # ifdef RLIMIT_NOFILE {_SGI_DMMX_r_nofiles, "nofiles(descriptors)", size_resource(1,RLIMIT_NOFILE)}, # else {_SGI_DMMX_r_nofiles, "nofiles(descriptors)", size_resource(1,0)}, # endif /* RLIMIT_NOFILE */ # ifdef RLIMIT_VMEM {_SGI_DMMX_r_vmemory, "vmemory(kbytes) ", size_resource(1024,RLIMIT_VMEM)}, # else {_SGI_DMMX_r_vmemory, "vmemory(kbytes) ", size_resource(1024,0)}, # endif /* RLIMIT_VMEM */ # ifdef RLIMIT_PTHREAD {_SGI_DMMX_r_concurrency, "concurrency(threads)", size_resource(1,RLIMIT_PTHREAD)} # else {_SGI_DMMX_r_concurrency, "concurrency(threads)", size_resource(1,0)} # endif /* RLIMIT_PTHREAD */ }; SYS2MSGTAB blimit_names = { {_SGI_DMMX_l_cputime, "cputime ", _SGI_DMMX_sc_seconds, "seconds", size_resource(1,LIM_CPU)}, {_SGI_DMMX_l_filesize, "filesize ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,LIM_FSIZE)}, {_SGI_DMMX_l_datasize, "datasize ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,LIM_DATA)}, {_SGI_DMMX_l_stacksize, "stacksize ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,LIM_STACK)}, {_SGI_DMMX_l_coredumpsize, "coredumpsize ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,LIM_CORE)}, # ifdef LIM_MAXRSS {_SGI_DMMX_l_memoryuse, "memoryuse ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,LIM_MAXRSS)}, # else {_SGI_DMMX_l_memoryuse, "memoryuse ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,0)}, # endif /* LIM_MAXRSS */ # ifdef RLIMIT_NOFILE {_SGI_DMMX_l_descriptors, "descriptors ", "", "", size_resource(1,RLIMIT_NOFILE)}, # else {_SGI_DMMX_l_descriptors, "descriptors ", "", "", size_resource(1,0)}, # endif /* RLIMIT_NOFILE */ # ifdef RLIMIT_VMEM {_SGI_DMMX_l_vmemory, "vmemory ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,RLIMIT_VMEM)}, # else {_SGI_DMMX_l_vmemory, "vmemory ", _SGI_DMMX_sc_kbytes, "kbytes", size_resource(1024,0)}, # endif /* RLIMIT_VMEM */ # ifdef RLIMIT_PTHREAD {_SGI_DMMX_l_threads, "threads ", "", "", size_resource(1,RLIMIT_PTHREAD)}, # else {_SGI_DMMX_l_threads, "threads ", "", "", size_resource(1,0)}, # endif /* RLIMIT_PTHREAD */ {NULLSTR, NULLSTR, NULLSTR, NULLSTR, 0} }; #endif /* LIM_CPU */ #ifdef cray const struct name_fvalue built_ins[] = # define VALPTR(x) x #else # define VALPTR(x) ((char*)x) const struct name_value built_ins[] = #endif /* cray */ { {"login", VALPTR(b_login), N_BLTIN|BLT_ENV}, {"exec", VALPTR(b_exec), N_BLTIN|BLT_ENV|BLT_SPC}, {"set", VALPTR(b_set), N_BLTIN|BLT_SPC}, {":", VALPTR(b_null), N_BLTIN|BLT_SPC}, {"true", VALPTR(b_null), N_BLTIN}, {"builtin_exec",VALPTR(b_null), N_BLTIN|BLT_EXEC}, #ifdef _bin_newgrp_ {"newgrp", VALPTR(b_login), N_BLTIN|BLT_ENV}, #endif /* _bin_newgrp_ */ {"false", VALPTR(b_null), N_BLTIN}, #ifdef apollo {"rootnode", VALPTR(b_rootnode), N_BLTIN}, {"ver", VALPTR(b_ver), N_BLTIN}, #endif /* apollo */ #ifdef LDYNAMIC {"inlib", VALPTR(b_inlib), N_BLTIN}, # ifndef apollo {"builtin", VALPTR(b_builtin), N_BLTIN}, # endif /* !apollo */ #endif /* LDYNAMIC */ {".", VALPTR(b_dot), N_BLTIN|BLT_SPC|BLT_FSUB}, {"readonly", VALPTR(b_readonly), N_BLTIN|BLT_SPC|BLT_DCL}, {"typeset", VALPTR(b_typeset), N_BLTIN|BLT_DCL}, {"return", VALPTR(b_ret_exit), N_BLTIN|BLT_SPC}, {"export", VALPTR(b_export), N_BLTIN|BLT_SPC|BLT_DCL}, {"eval", VALPTR(b_eval), N_BLTIN|BLT_SPC|BLT_FSUB}, {"fc", VALPTR(b_fc), N_BLTIN|BLT_FSUB|BLT_EXEC}, {"shift", VALPTR(b_shift), N_BLTIN|BLT_SPC}, {"cd", VALPTR(b_chdir), N_BLTIN|BLT_EXEC}, #ifdef OLDTEST {"[", VALPTR(b_test), N_BLTIN}, #endif /* OLDTEST */ { "alias", VALPTR(b_alias), N_BLTIN|BLT_SPC|BLT_DCL|BLT_EXEC}, {"break", VALPTR(b_break), N_BLTIN|BLT_SPC}, {"continue", VALPTR(b_continue), N_BLTIN|BLT_SPC}, #ifdef ECHOPRINT {"echo", VALPTR(b_print), N_BLTIN}, #else {"echo", VALPTR(b_echo), N_BLTIN}, #endif /* ECHOPRINT */ {"exit", VALPTR(b_ret_exit), N_BLTIN|BLT_SPC}, #ifdef JOBS # ifdef SIGTSTP {"bg", VALPTR(b_bgfg), N_BLTIN|BLT_EXEC}, {"fg", VALPTR(b_bgfg), N_BLTIN|BLT_EXEC}, # endif /* SIGTSTP */ {"jobs", VALPTR(b_jobs), N_BLTIN|BLT_EXEC}, {"kill", VALPTR(b_kill), N_BLTIN|BLT_EXEC}, #endif /* JOBS */ {"let", VALPTR(b_let), N_BLTIN}, {"print", VALPTR(b_print), N_BLTIN}, {"pwd", VALPTR(b_pwd), N_BLTIN}, {"read", VALPTR(b_read), N_BLTIN|BLT_EXEC}, #ifdef SYSCOMPILE {"shcomp", VALPTR(b_shcomp), N_BLTIN}, #endif /* SYSCOMPILE */ #ifdef SYSSLEEP {"sleep", VALPTR(b_sleep), N_BLTIN}, #endif /* SYSSLEEP */ #ifdef OLDTEST {"test", VALPTR(b_test), N_BLTIN}, #endif /* OLDTEST */ {"times", VALPTR(b_times), N_BLTIN|BLT_SPC}, {"trap", VALPTR(b_trap), N_BLTIN|BLT_SPC}, {"type", VALPTR(b_type), N_BLTIN|BLT_EXEC}, {"ulimit", VALPTR(b_ulimit), N_BLTIN|BLT_EXEC}, {"limit", VALPTR(b_limit), N_BLTIN|BLT_EXEC}, {"unlimit", VALPTR(b_unlimit), N_BLTIN|BLT_EXEC}, {"umask", VALPTR(b_umask), N_BLTIN|BLT_EXEC}, {"unalias", VALPTR(b_unalias), N_BLTIN|BLT_EXEC}, {"unset", VALPTR(b_unset), N_BLTIN|BLT_SPC}, {"wait", VALPTR(b_wait), N_BLTIN|BLT_EXEC}, {"whence", VALPTR(b_whence), N_BLTIN}, {"getopts", VALPTR(b_getopts), N_BLTIN|BLT_EXEC}, {"hash", VALPTR(b_hash), N_BLTIN|BLT_EXEC}, #ifdef UNIVERSE {"universe", VALPTR(b_universe), N_BLTIN}, #endif /* UNIVERSE */ #ifdef FS_3D {"vpath", VALPTR(b_vpath_map), N_BLTIN}, {"vmap", VALPTR(b_vpath_map), N_BLTIN}, #endif /* FS_3D */ {"command", VALPTR(b_command), N_BLTIN|BLT_EXEC}, {e_nullstr, 0, 0 } }; SYSTAB test_optable = { {"!=", TEST_SNE}, {"-a", TEST_AND}, {"-ef", TEST_EF}, {"-eq", TEST_EQ}, {"-ge", TEST_GE}, {"-gt", TEST_GT}, {"-le", TEST_LE}, {"-lt", TEST_LT}, {"-ne", TEST_NE}, {"-nt", TEST_NT}, {"-o", TEST_OR}, {"-ot", TEST_OT}, {"=", TEST_SEQ}, {"==", TEST_SEQ}, #ifdef NEWTEST {"<", TEST_SLT}, {">", TEST_SGT}, {"]]", TEST_END}, #endif /* NEWTEST */ {e_nullstr, 0} }; SYSTAB tab_attributes = { {"export", N_EXPORT}, {"readonly", N_RDONLY}, {"tagged", T_FLAG}, #ifdef FLOAT {"exponential", (N_DOUBLE|N_INTGER|N_EXPNOTE)}, {"float", (N_DOUBLE|N_INTGER)}, #endif /* FLOAT */ {"long", (L_FLAG|N_INTGER)}, {"unsigned", (N_UNSIGN|N_INTGER)}, {"function", (N_BLTNOD|N_INTGER)}, {"integer", N_INTGER}, {"filename", N_HOST}, {"lowercase", N_UTOL}, {"zerofill", N_ZFILL}, {"leftjust", N_LJUST}, {"rightjust", N_RJUST}, {"uppercase", N_LTOU}, {e_nullstr, 0} }; #ifndef IODELAY # undef _SELECT5_ #endif /* IODELAY */ #ifdef _sgtty_ # ifdef _SELECT5_ const int tty_speeds[] = {0, 50, 75, 110, 134, 150, 200, 300, 600,1200,1800,2400,9600,19200,0}; # endif /* _SELECT5_ */ #endif /* _sgtty_ */