zsh-workers
 help / color / mirror / code / Atom feed
* Re: Further special parameter changes
  1995-07-24 12:14 Further special parameter changes Zoltan Hidvegi
@ 1995-07-24 11:57 ` Zefram
  1995-07-24 19:01   ` Zoltan Hidvegi
  0 siblings, 1 reply; 3+ messages in thread
From: Zefram @ 1995-07-24 11:57 UTC (permalink / raw)
  To: Zoltan Hidvegi; +Cc: Z Shell workers mailing list

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.

-zefram


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Further special parameter changes
@ 1995-07-24 12:14 Zoltan Hidvegi
  1995-07-24 11:57 ` Zefram
  0 siblings, 1 reply; 3+ messages in thread
From: Zoltan Hidvegi @ 1995-07-24 12:14 UTC (permalink / raw)
  To: zsh-workers

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. These parameters are not sh/ksh
compatible and all of them has an equivalent compatible pair.  Without this
patch sh scripts doing something like

foo ; status=$? ; if [ $status = ...

will fail because $status is a special parameter (I had such a script and this
idiom is quite common in sh scripts).

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.

Bye,
   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 | PM_UNIQUE, 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 | PM_UNIQUE, 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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Further special parameter changes
  1995-07-24 11:57 ` Zefram
@ 1995-07-24 19:01   ` Zoltan Hidvegi
  0 siblings, 0 replies; 3+ messages in thread
From: Zoltan Hidvegi @ 1995-07-24 19:01 UTC (permalink / raw)
  To: zsh-workers

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1995-07-24 18:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1995-07-24 12:14 Further special parameter changes Zoltan Hidvegi
1995-07-24 11:57 ` Zefram
1995-07-24 19:01   ` Zoltan Hidvegi

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).