From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gatech.edu (gatech.edu [130.207.244.244]) by werple.mira.net.au (8.6.12/8.6.9) with SMTP id EAA28535 for ; Tue, 25 Jul 1995 04:07:37 +1000 Received: from math (math.skiles.gatech.edu) by gatech.edu with SMTP id AA17987 (5.65c/Gatech-10.0-IDA for ); Mon, 24 Jul 1995 14:06:55 -0400 Received: by math (5.x/SMI-SVR4) id AA08671; Mon, 24 Jul 1995 14:03:01 -0400 Resent-Date: Mon, 24 Jul 1995 20:01:22 +0100 (MET DST) Old-Return-Path: From: hzoli@cs.elte.hu (Zoltan Hidvegi) Message-Id: <9507241801.AA13789@turan.elte.hu> Subject: Re: Further special parameter changes To: zsh-workers@math.gatech.edu (zsh-workers) Date: Mon, 24 Jul 1995 20:01:22 +0100 (MET DST) In-Reply-To: <14515.199507241157@stone.dcs.warwick.ac.uk> from "Zefram" at Jul 24, 95 12:57:58 pm X-Mailer: ELM [version 2.4 PL21] Content-Type: text Resent-Message-Id: <"F3ZEf3.0.P72.K1-4m"@math> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/271 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu Zefram wrote: > > Zoltan wrote: > >The patch below further reduces the number of special parameters. It makes > >TTY, FCEDIT, HOST, MAIL, TIMEFMT, TMPPREFIX, WATCHFMT and signals non-special. > >If zsh is invoked as sh/ksh, it removes the ARGC, status, prompt, PROMPT2, > >PROMPT3, PROMPT4 and argv parameters. > [...] > >The patch depends on my previous patch which removed LOGNAME from the special > >parameter list (art. 268). Or you can apply it to my release as well which > >already contains the LOGNAME patch. > > Unfortunately it also depends on your array-uniquing patch. Without it > there's a rejection of a critical hunk in params.h, because the line > for $path has the PM_UNIQUE flag in the patch. It's easy to fix by > hand, by removing that flag from the two lines in the patch that have > it. It is hard to keep track of these dependencies. Here is the patch again, which applies to beta10. Zoltan *** 1.8 1995/07/06 12:28:04 --- Src/globals.h 1995/07/07 23:09:17 *************** *** 91,98 **** EXTERN int userdirsz, userdirct; - EXTERN char *mailfile; - EXTERN char *yytext; /* error/break flag */ --- 91,96 ---- *************** *** 324,339 **** EXTERN char *rprompt; /* $RPROMPT */ EXTERN char *sprompt; - EXTERN char *timefmt; /* $TIMEFMT */ - EXTERN char *watchfmt; /* $WATCHFMT */ EXTERN char *wordchars; - EXTERN char *fceditparam; - EXTERN char *tmpprefix; /* $TMPPREFIX */ EXTERN char *rstring, *Rstring; EXTERN char *postedit; EXTERN char *hostnam; /* from gethostname */ - EXTERN char *hostvar; /* $HOST */ EXTERN char *home; /* $HOME */ EXTERN char **pparams; /* $argv */ --- 322,332 ---- *************** *** 541,552 **** EXTERN int noaliases; #ifdef GLOBALS - /* signal names */ - char **sigptr = sigs; /* tokens */ char *ztokens = "#$^*()$=|{}[]`<>?~`,'\"\\"; #else ! extern char *ztokens, **sigptr; #endif /* $histchars */ --- 534,543 ---- EXTERN int noaliases; #ifdef GLOBALS /* tokens */ char *ztokens = "#$^*()$=|{}[]`<>?~`,'\"\\"; #else ! extern char *ztokens; #endif /* $histchars */ *** 1.4 1995/07/04 14:23:18 --- Src/params.h 1995/07/07 23:09:17 *************** *** 51,57 **** #define IPDEF1(A,B,C,D) {NULL,A,NULL,IFN(C),IFN(B),10,\ PM_INTEGER|PM_SPECIAL|D,NULL,NULL,NULL,NULL,0} IPDEF1("#", poundgetfn, IFN(nullsetfn), PM_READONLY), - IPDEF1("ARGC", poundgetfn, IFN(nullsetfn), PM_READONLY), IPDEF1("ERRNO", errnogetfn, IFN(nullsetfn), PM_READONLY), IPDEF1("GID", gidgetfn, gidsetfn, 0), IPDEF1("EGID", egidgetfn, egidsetfn, 0), --- 51,56 ---- *************** *** 82,88 **** IPDEF4("!", &lastpid), IPDEF4("$", &mypid), IPDEF4("?", &lastval), - IPDEF4("status", &lastval), IPDEF4("LINENO", &lineno), IPDEF4("PPID", &ppid), --- 81,86 ---- *************** *** 106,127 **** #define IPDEF6(A,B) {NULL,A,NULL,IFN(nullsetfn),IFN(strvargetfn),0,\ PM_SCALAR|PM_READONLY|PM_SPECIAL,(void *)B,NULL,NULL,NULL,0} IPDEF6("PWD", &pwd), - IPDEF6("TTY", &ttystrname), #define IPDEF7(A,B) {NULL,A,NULL,IFN(strvarsetfn),IFN(strvargetfn),0,\ PM_SCALAR|PM_SPECIAL,(void *)B,NULL,NULL,NULL,0} - IPDEF7("FCEDIT", &fceditparam), - IPDEF7("HOST", &hostvar), IPDEF7("OLDPWD", &oldpwd), IPDEF7("OPTARG", &zoptarg), - IPDEF7("MAIL", &mailfile), IPDEF7("NULLCMD", &nullcmd), IPDEF7("POSTEDIT", &postedit), - IPDEF7("prompt", &prompt), - IPDEF7("PROMPT", &prompt), - IPDEF7("PROMPT2", &prompt2), - IPDEF7("PROMPT3", &prompt3), - IPDEF7("PROMPT4", &prompt4), IPDEF7("READNULLCMD", &readnullcmd), IPDEF7("RPROMPT", &rprompt), IPDEF7("PS1", &prompt), --- 104,116 ---- *************** *** 130,138 **** IPDEF7("PS4", &prompt4), IPDEF7("RPS1", &rprompt), IPDEF7("SPROMPT", &sprompt), - IPDEF7("TIMEFMT", &timefmt), - IPDEF7("TMPPREFIX", &tmpprefix), - IPDEF7("WATCHFMT", &watchfmt), IPDEF7("0", &argzero), #define IPDEF8(A,B,C) {NULL,A,NULL,IFN(colonarrsetfn),IFN(colonarrgetfn),0,\ --- 119,124 ---- *************** *** 157,169 **** IPDEF9("manpath", 0, &manpath, "MANPATH"), IPDEF9("watch", 0, &watch, "WATCH"), IPDEF9("psvar", 0, &psvar, "PSVAR"), - IPDEF9("signals", PM_READONLY, &sigptr, NULL), - IPDEF9("argv", 0, &pparams, NULL), IPDEF9("*", 0, &pparams, NULL), IPDEF9("@", 0, &pparams, NULL), {NULL, "path", NULL, IFN(pathsetfn), IFN(pathgetfn), 0, PM_ARRAY | PM_SPECIAL, NULL, NULL, "PATH", NULL, 0}, {NULL,} }; --- 143,166 ---- IPDEF9("manpath", 0, &manpath, "MANPATH"), IPDEF9("watch", 0, &watch, "WATCH"), IPDEF9("psvar", 0, &psvar, "PSVAR"), IPDEF9("*", 0, &pparams, NULL), IPDEF9("@", 0, &pparams, NULL), {NULL, "path", NULL, IFN(pathsetfn), IFN(pathgetfn), 0, PM_ARRAY | PM_SPECIAL, NULL, NULL, "PATH", NULL, 0}, + + {NULL,}, + + /* The following parameters are not avaible in sh/ksh compatibility * + * mode. All of these has sh compatible equivalents. */ + IPDEF1("ARGC", poundgetfn, IFN(nullsetfn), PM_READONLY), + IPDEF4("status", &lastval), + IPDEF7("prompt", &prompt), + IPDEF7("PROMPT", &prompt), + IPDEF7("PROMPT2", &prompt2), + IPDEF7("PROMPT3", &prompt3), + IPDEF7("PROMPT4", &prompt4), + IPDEF9("argv", 0, &pparams, NULL), {NULL,} }; *** 1.12 1995/07/04 18:21:23 --- Src/params.c 1995/07/23 00:43:13 *************** *** 44,50 **** { struct iparam *ip; Param pm; ! char **old_environ, **envp, **envp2; char buf[50], *str, *iname; int num_env; --- 44,50 ---- { struct iparam *ip; Param pm; ! char **old_environ, **envp, **envp2, **sigptr, **t; char buf[50], *str, *iname; int num_env; *************** *** 63,72 **** /* Add the special parameter to the hash table */ for (ip = special_param; ip->nam; ip++) paramtab->addnode(paramtab, ztrdup(ip->nam), ip); ! ! argvparam = (Param) paramtab->getnode(paramtab, "argv"); ! setsparam("LOGNAME", ztrdup((str = getlogin()) && *str ? str : cached_username)); noerrs = 1; /* Copy the environment variables we are inheriting to dynamic * --- 63,83 ---- /* Add the special parameter to the hash table */ for (ip = special_param; ip->nam; ip++) paramtab->addnode(paramtab, ztrdup(ip->nam), ip); ! if (strcmp(zsh_name, "sh") && strcmp(zsh_name, "ksh")) ! while ((++ip)->nam) ! paramtab->addnode(paramtab, ztrdup(ip->nam), ip); ! ! argvparam = (Param) paramtab->getnode(paramtab, "*"); ! ! /* Add standard non-special parameters which have to be * ! * initialized before we copy the environment variables since * ! * zsh mustn't override their values in the environment. */ setsparam("LOGNAME", ztrdup((str = getlogin()) && *str ? str : cached_username)); + setsparam("FCEDIT", ztrdup(DEFAULT_FCEDIT)); + setsparam("HOST", ztrdup(hostnam)); + setsparam("TIMEFMT", ztrdup(DEFAULT_TIMEFMT)); + setsparam("WATCHFMT", ztrdup(DEFAULT_WATCHFMT)); + setsparam("TMPPREFIX", ztrdup(DEFAULT_TMPPREFIX)); noerrs = 1; /* Copy the environment variables we are inheriting to dynamic * *************** *** 123,131 **** --- 134,145 ---- setsparam("HOSTTYPE", ztrdup(HOSTTYPE)); setsparam("MACHTYPE", ztrdup(MACHTYPE)); setsparam("OSTYPE", ztrdup(OSTYPE)); + setsparam("TTY", ztrdup(ttystrname)); setsparam("VENDOR", ztrdup(VENDOR)); setsparam("ZSH_NAME", ztrdup(zsh_name)); setsparam("ZSH_VERSION", ztrdup(ZSH_VERSION)); + setaparam("signals", sigptr = zalloc((SIGCOUNT+4) * sizeof(char *))); + for (t = sigs; (*sigptr++ = ztrdup(*t++)); ); noerrs = 0; } *** 1.10 1995/07/07 18:32:30 --- Src/init.c 1995/07/23 00:18:56 *************** *** 513,523 **** if (!(ttystrname = ztrdup(ttyname(SHTTY)))) ttystrname = ztrdup(""); ifs = ztrdup(" \t\n"); - timefmt = ztrdup(DEFAULT_TIMEFMT); - watchfmt = ztrdup(DEFAULT_WATCHFMT); wordchars = ztrdup(DEFAULT_WORDCHARS); - fceditparam = ztrdup(DEFAULT_FCEDIT); - tmpprefix = ztrdup(DEFAULT_TMPPREFIX); postedit = ztrdup(""); underscore = ztrdup(""); --- 513,519 ---- *************** *** 533,539 **** hostnam = (char *) zalloc(256); gethostname(hostnam, 256); - hostvar = ztrdup(hostnam); compctlsetup(); namdirs = (Nameddirs) zcalloc(sizeof(*namdirs) * 2); --- 529,534 ---- *** 1.1 1995/06/23 07:48:00 --- Src/watch.c 1995/07/23 00:26:00 *************** *** 377,388 **** dowatch(void) { char **s = watch; ! char *fmt = (watchfmt) ? watchfmt : DEFAULT_WATCHFMT; FILE *in; int utabsz = 0, utabmax = wtabsz + 4, uct, wct; STRUCT_UTMP *utab, *uptr, *wptr; struct stat st; holdintr(); if (!fmt) fmt = "%n has %a %l from %m."; --- 377,390 ---- dowatch(void) { char **s = watch; ! char *fmt = getsparam("WATCHFMT"); FILE *in; int utabsz = 0, utabmax = wtabsz + 4, uct, wct; STRUCT_UTMP *utab, *uptr, *wptr; struct stat st; + if (!fmt) + fmt = DEFAULT_WATCHFMT; holdintr(); if (!fmt) fmt = "%n has %a %l from %m."; *** 1.1 1995/06/18 06:44:03 --- Src/jobs.c 1995/07/23 00:22:45 *************** *** 696,702 **** if (percent > 100) percent = 100; /* just to make it look right */ ! for (s = (timefmt ? timefmt : DEFAULT_TIMEFMT); *s; s++) if (*s == '%') switch (*++s) { case 'E': --- 696,704 ---- if (percent > 100) percent = 100; /* just to make it look right */ ! if (!(s = getsparam("TIMEFMT"))) ! s = DEFAULT_TIMEFMT; ! for (; *s; s++) if (*s == '%') switch (*++s) { case 'E': *** 1.25 1995/07/17 20:57:39 --- Src/builtin.c 1995/07/23 00:31:06 *************** *** 2703,2715 **** ((out = fdopen(tempfd, "w")) == NULL)) { zwarnnam("fc", "can't open temp file: %e", NULL, errno); } else { ! if (!fclist(out, 0, ops['r'], 0, 0, first, last, asgf, com)) ! if (fcedit(auxdata ? auxdata : ! (fceditparam ? fceditparam : DEFAULT_FCEDIT), fil)) if (stuff(fil)) zwarnnam("fc", "%e: %s", s, errno); else retval = 0; } unlink(fil); } --- 2703,2717 ---- ((out = fdopen(tempfd, "w")) == NULL)) { zwarnnam("fc", "can't open temp file: %e", NULL, errno); } else { ! if (!fclist(out, 0, ops['r'], 0, 0, first, last, asgf, com)) { ! char *editor = auxdata ? auxdata : getsparam("FCEDIT"); ! ! if (fcedit(editor ? editor : DEFAULT_FCEDIT, fil)) if (stuff(fil)) zwarnnam("fc", "%e: %s", s, errno); else retval = 0; + } } unlink(fil); } *** 1.12 1995/07/14 14:24:06 --- Src/exec.c 1995/07/23 00:27:07 *************** *** 2055,2060 **** --- 2055,2062 ---- char * gettemp(void) { + char *tmpprefix = getsparam("TMPPREFIX"); + return ((char *) mktemp(dyncat((tmpprefix ? tmpprefix : DEFAULT_TMPPREFIX), "XXXXXX"))); } *** 1.13 1995/07/14 14:18:35 --- Src/utils.c 1995/07/23 00:03:39 *************** *** 589,597 **** return; diff = (int)difftime(time(NULL), lastmailcheck); if (diff > mailcheck) { if (mailpath && *mailpath && **mailpath) checkmailpath(mailpath); ! else if (mailfile && *mailfile) { char *x[2]; x[0] = mailfile; --- 589,599 ---- return; diff = (int)difftime(time(NULL), lastmailcheck); if (diff > mailcheck) { + char *mailfile; + if (mailpath && *mailpath && **mailpath) checkmailpath(mailpath); ! else if ((mailfile = getsparam("MAIL")) && *mailfile) { char *x[2]; x[0] = mailfile; *** 1.8 1995/07/11 15:09:08 --- Doc/zshparam.1 1995/07/22 23:58:07 *************** *** 127,133 **** The number of positional parameters in decimal. .TP .B ARGC ! Same as \fB#\fP. .TP .B $ The process id of this shell. --- 127,133 ---- The number of positional parameters in decimal. .TP .B ARGC ! Same as \fB#\fP. It has no special meaning in sh/ksh compatibility mode. .TP .B $ The process id of this shell. *************** *** 140,155 **** An array containing the positional parameters. .TP .B argv ! Same as \fB*\fP. .TP .B @ ! Same as \fBargv[@]\fP. .TP .B ? The exit value returned by the last command. .TP .B status ! Same as \fB?\fP. .TP .B _ The last argument of the previous command. --- 140,155 ---- An array containing the positional parameters. .TP .B argv ! Same as \fB*\fP. It has no special meaning in sh/ksh compatibility mode. .TP .B @ ! Same as \fBargv[@]\fP but it can be used in sh/ksh compatibility mode. .TP .B ? The exit value returned by the last command. .TP .B status ! Same as \fB?\fP. It has no special meaning in sh/ksh compatibility mode. .TP .B _ The last argument of the previous command. *************** *** 393,400 **** .TP .B MAIL If this parameter is set and \fBmailpath\fP is not set, ! the shell looks for mail in the specified file. By default it is set to ! the user's system mailbox. .TP .B MAILCHECK The interval in seconds between checks for new mail. --- 393,399 ---- .TP .B MAIL If this parameter is set and \fBmailpath\fP is not set, ! the shell looks for mail in the specified file. .TP .B MAILCHECK The interval in seconds between checks for new mail. *************** *** 432,438 **** This string is output whenever the line editor exits. It usually contains termcap strings to reset the terminal. .TP ! .B PROMPT The primary prompt string, printed before a command is read; the default is "%m%# ". If the escape sequence takes an optional integer, it should appear between the '%' and the next character of the --- 431,437 ---- This string is output whenever the line editor exits. It usually contains termcap strings to reset the terminal. .TP ! .B PS1 The primary prompt string, printed before a command is read; the default is "%m%# ". If the escape sequence takes an optional integer, it should appear between the '%' and the next character of the *************** *** 621,649 **** .PP .PD 0 .TP ! .B PROMPT2 The secondary prompt, printed when the shell needs more information to complete a command. ! Recognizes the same escape sequences as \fB$PROMPT\fP. The default is "> ". .TP ! .B PROMPT3 Selection prompt used within a \fBselect\fP loop. ! Recognizes the same escape sequences as \fB$PROMPT\fP. The default is "?# ". .TP ! .B PROMPT4 The execution trace prompt. Default is "+ ". .TP ! .B PS1 .TP ! .B PS2 .TP ! .B PS3 .TP ! .B PS4 ! Same as \fBPROMPT\fP, \fBPROMPT2\fP, \fBPROMPT3\fP, and \fBPROMPT4\fP, ! respectively. .TP .B psvar (PSVAR) An array (colon-separated list) whose first nine values can be used in --- 620,649 ---- .PP .PD 0 .TP ! .B PS2 The secondary prompt, printed when the shell needs more information to complete a command. ! Recognizes the same escape sequences as \fB$PS1\fP. The default is "> ". .TP ! .B PS3 Selection prompt used within a \fBselect\fP loop. ! Recognizes the same escape sequences as \fB$PS1\fP. The default is "?# ". .TP ! .B PS4 The execution trace prompt. Default is "+ ". .TP ! .B PROMPT .TP ! .B PROMPT2 .TP ! .B PROMPT3 .TP ! .B PROMPT4 ! Same as \fBPS1\fP, \fBPS2\fP, \fBPS3\fP, and \fBPS4\fP, ! respectively. These parameters do not have any special ! meaning in sh/ksh compatibility mode. .TP .B psvar (PSVAR) An array (colon-separated list) whose first nine values can be used in *************** *** 651,657 **** vice versa. .TP .B prompt ! Same as \fBPROMPT\fP. .TP .B READNULLCMD The command name to assume if a single input redirection --- 651,657 ---- vice versa. .TP .B prompt ! Same as \fBPS1\fP. It has no special meaning in sh/ksh compatibility mode. .TP .B READNULLCMD The command name to assume if a single input redirection