Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] More readable parameter definitions in params.c
- X-seq: zsh-workers 55022
- From: Philippe Altherr <philippe.altherr@xxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: [PATCH] More readable parameter definitions in params.c
- Date: Thu, 23 Jul 2026 00:40:41 +0200
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=dI/JKlnJKQLnQwVL3ejDAgyL0W2MM/z+2Aew9Qig0ew=; fh=BgAYDYpL6Ne/A5nWEMVJiHiBtrz8Imz3uf26RDwgQX4=; b=X4Abw9ezs4+y/txhdiX8oMm4sHMKEw0cwNuWqNQ/P7YIi7lBZWhMltiJ7k5Sy08lyX nqtnFBXMwb2BPTj61fX0VpYGdVQMuvE3D96le8MZvyXDF1zb9lddlf5YYzzDra6xY7HO 5uRpa1pRlEw4de2kqKWKqdWGTiJ5nU5dDU+yxo4CIYBADiTGrjwp3jcwfpWFAjSr/dwG 8/foIGnyQAJlxqA/cwQBMFdem00Q/aAFzFKSvLmDpwCMDMgO0FA8oqynqEkGBin6+d4b WvtlrCi57myOUTeRXLkdT9j4RePs52C10JzW374s/fLTmh4vPKotN8R0bLliWrAOa/uJ S3fA==; darn=zsh.org
- Arc-seal: i=1; a=rsa-sha256; t=1784760054; cv=none; d=google.com; s=arc-20260327; b=d2dEmgy+LclTM8pgJWdRNO9bSXGFchPoofn/LQc8uSFDnjUPw9d8Q/p+mbqPOr9AZ/ TsPCwE1HlKCBLs9pomZaI6GLKD8VKgcGI2dpjoLa5hz8xvD11xjxay0+M6RZqpaP6XvI zMQaIwODxh6mZap1lXAzbVQ+rvErqQl5Ezt8CePmI5bBe+h7JdoeEbTpWtDzpyNnFd63 qEtF1OS+c5ZzBorNF0ttXkZuTz0bg9ZxHw2+L4ImND7ww0IJBHlcIl1HDjKTCAB5lptY IduyYxZalXJTqpADyqkMjjNdeLB7pNLTpAEhWGNfokFYz7K6w6KNc6X+/taVTGpu1r3r LMOA==
- Archived-at: <https://zsh.org/workers/55022>
- List-id: <zsh-workers.zsh.org>
After having to decipher for the nth time the cryptic IPDEFX macros, I decided to come up with something easier to read and understand. This is a no-op patch. It only changes the macros used to declare the parameter definitions.
diff --git a/Src/params.c b/Src/params.c
index 7409ff530..06df78070 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -297,154 +297,171 @@ typedef struct iparam {
} initparam;
#endif
-static initparam special_params[] ={
-#define GSU(X) BR((GsuScalar)(void *)(&(X)))
+#define GSU(X) BR((GsuScalar)(void *)(&(X)))
#define NULL_GSU BR((GsuScalar)(void *)NULL)
-#define IPDEF1(A,B,C) {{NULL,A,PM_INTEGER|PM_SPECIAL|C},BR(NULL),GSU(B),10,0,NULL,NULL,NULL,0}
-IPDEF1("#", pound_gsu, PM_READONLY_SPECIAL),
-IPDEF1("ERRNO", errno_gsu, PM_UNSET),
-IPDEF1("GID", gid_gsu, PM_DONTIMPORT),
-IPDEF1("EGID", egid_gsu, PM_DONTIMPORT),
-IPDEF1("HISTSIZE", histsize_gsu, 0),
-IPDEF1("RANDOM", random_gsu, 0),
-IPDEF1("SAVEHIST", savehist_gsu, 0),
-IPDEF1("SECONDS", intseconds_gsu, 0),
-IPDEF1("UID", uid_gsu, PM_DONTIMPORT),
-IPDEF1("EUID", euid_gsu, PM_DONTIMPORT),
-IPDEF1("TTYIDLE", ttyidle_gsu, PM_READONLY_SPECIAL),
-
-#define IPDEF2(A,B,C) {{NULL,A,PM_SCALAR|PM_SPECIAL|C},BR(NULL),GSU(B),0,0,NULL,NULL,NULL,0}
-IPDEF2("USERNAME", username_gsu, PM_DONTIMPORT),
-IPDEF2("-", dash_gsu, PM_READONLY_SPECIAL),
-IPDEF2("histchars", histchars_gsu, PM_DONTIMPORT),
-IPDEF2("HOME", home_gsu, PM_UNSET),
-IPDEF2("TERM", term_gsu, PM_UNSET),
-IPDEF2("TERMINFO", terminfo_gsu, PM_UNSET),
-IPDEF2("TERMINFO_DIRS", terminfodirs_gsu, PM_UNSET),
-IPDEF2("WORDCHARS", wordchars_gsu, 0),
-IPDEF2("IFS", ifs_gsu, PM_DONTIMPORT),
-IPDEF2("_", underscore_gsu, PM_DONTIMPORT),
-IPDEF2("KEYBOARD_HACK", keyboard_hack_gsu, PM_DONTIMPORT),
-IPDEF2("0", argzero_gsu, 0),
+
+#define PM(name, var, gsu, flags, base, ename) \
+ { { NULL, name, PM_SPECIAL|flags }, \
+ BR((void *)var), GSU(gsu), base, 0, NULL, ename, NULL, 0 }
+#define NULL_PM \
+ { { NULL, NULL, 0 }, BR(NULL), NULL_GSU, 0, 0, NULL, NULL, NULL, 0 }
+
+#define STRPM(name, var, gsu, flags) \
+ PM(name, var, gsu, PM_SCALAR|flags, 0, NULL)
+#define INTPM(name, var, gsu, flags) \
+ PM(name, var, gsu, PM_INTEGER|flags, 10, NULL)
+#define ARRPM(name, var, gsu, flags) \
+ PM(name, var, gsu, PM_ARRAY|PM_DONTIMPORT|flags, 0 , NULL)
+
+#define VAR_STRPM(name, var, flags) STRPM(name, var, varscalar_gsu, flags)
+#define VAR_INTPM(name, var, flags) INTPM(name, var, varinteger_gsu, flags)
+#define VAR_ARRPM(name, var, flags) ARRPM(name, var, vararray_gsu, flags)
+
+#define ROVAR_INTPM(name, var, flags) \
+ INTPM(name, var, varint_readonly_gsu, PM_READONLY_SPECIAL|flags)
+
+#define LC_STRPM(name) \
+ STRPM(name, NULL, lc_blah_gsu, PM_UNSET)
+#define COLONARR_STRPM(name, var, flags) \
+ STRPM(name, var, colonarr_gsu, flags)
+
+#define TIED_STRPM(name, var, ename, flags) \
+ PM(name, var, colonarr_gsu, PM_TIED|PM_SCALAR|flags, 0, ename)
+#define TIED_ARRPM(name, var, ename, flags) \
+ PM(name, var, vararray_gsu, PM_TIED|PM_ARRAY|PM_DONTIMPORT|flags, 0, ename)
+
+static initparam special_params[] = {
+ INTPM("#", NULL, pound_gsu, PM_READONLY_SPECIAL),
+ INTPM("ERRNO", NULL, errno_gsu, PM_UNSET),
+ INTPM("GID", NULL, gid_gsu, PM_DONTIMPORT),
+ INTPM("EGID", NULL, egid_gsu, PM_DONTIMPORT),
+ INTPM("HISTSIZE", NULL, histsize_gsu, 0),
+ INTPM("RANDOM", NULL, random_gsu, 0),
+ INTPM("SAVEHIST", NULL, savehist_gsu, 0),
+ INTPM("SECONDS", NULL, intseconds_gsu, 0),
+ INTPM("UID", NULL, uid_gsu, PM_DONTIMPORT),
+ INTPM("EUID", NULL, euid_gsu, PM_DONTIMPORT),
+ INTPM("TTYIDLE", NULL, ttyidle_gsu, PM_READONLY_SPECIAL),
+
+ STRPM("USERNAME", NULL, username_gsu, PM_DONTIMPORT),
+ STRPM("-", NULL, dash_gsu, PM_READONLY_SPECIAL),
+ STRPM("histchars", NULL, histchars_gsu, PM_DONTIMPORT),
+ STRPM("HOME", NULL, home_gsu, PM_UNSET),
+ STRPM("TERM", NULL, term_gsu, PM_UNSET),
+ STRPM("TERMINFO", NULL, terminfo_gsu, PM_UNSET),
+ STRPM("TERMINFO_DIRS", NULL, terminfodirs_gsu, PM_UNSET),
+ STRPM("WORDCHARS", NULL, wordchars_gsu, 0),
+ STRPM("IFS", NULL, ifs_gsu, PM_DONTIMPORT),
+ STRPM("_", NULL, underscore_gsu, PM_DONTIMPORT),
+ STRPM("KEYBOARD_HACK", NULL, keyboard_hack_gsu, PM_DONTIMPORT),
+ STRPM("0", NULL, argzero_gsu, 0),
#ifdef USE_LOCALE
-# define LCIPDEF(name) IPDEF2(name, lc_blah_gsu, PM_UNSET)
-IPDEF2("LANG", lang_gsu, PM_UNSET),
-IPDEF2("LC_ALL", lc_all_gsu, PM_UNSET),
+ STRPM("LANG", NULL, lang_gsu, PM_UNSET),
+ STRPM("LC_ALL", NULL, lc_all_gsu, PM_UNSET),
# ifdef LC_COLLATE
-LCIPDEF("LC_COLLATE"),
+ LC_STRPM("LC_COLLATE"),
# endif
# ifdef LC_CTYPE
-LCIPDEF("LC_CTYPE"),
+ LC_STRPM("LC_CTYPE"),
# endif
# ifdef LC_MESSAGES
-LCIPDEF("LC_MESSAGES"),
+ LC_STRPM("LC_MESSAGES"),
# endif
# ifdef LC_NUMERIC
-LCIPDEF("LC_NUMERIC"),
+ LC_STRPM("LC_NUMERIC"),
# endif
# ifdef LC_TIME
-LCIPDEF("LC_TIME"),
+ LC_STRPM("LC_TIME"),
# endif
#endif /* USE_LOCALE */
-#define IPDEF4(A,B) {{NULL,A,PM_INTEGER|PM_READONLY_SPECIAL},BR((void *)B),GSU(varint_readonly_gsu),10,0,NULL,NULL,NULL,0}
-IPDEF4("!", &lastpid),
-IPDEF4("$", &mypid),
-IPDEF4("?", &lastval),
-IPDEF4("HISTCMD", &curhist),
-IPDEF4("LINENO", &lineno),
-IPDEF4("PPID", &ppid),
-IPDEF4("ZSH_SUBSHELL", &zsh_subshell),
-
-#define IPDEF5(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
-#define IPDEF5U(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
-IPDEF5("COLUMNS", &zterm_columns, zlevar_gsu),
-IPDEF5("LINES", &zterm_lines, zlevar_gsu),
-IPDEF5U("ZLE_RPROMPT_INDENT", &rprompt_indent, rprompt_indent_gsu),
-IPDEF5("SHLVL", &shlvl, varinteger_gsu),
-IPDEF5("FUNCNEST", &zsh_funcnest, varinteger_gsu),
-
-/* Don't import internal integer status variables. */
-#define IPDEF6(A,B,F) {{NULL,A,PM_INTEGER|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(F),10,0,NULL,NULL,NULL,0}
-IPDEF6("OPTIND", &zoptind, varinteger_gsu),
-IPDEF6("TRY_BLOCK_ERROR", &try_errflag, varinteger_gsu),
-IPDEF6("TRY_BLOCK_INTERRUPT", &try_interrupt, varinteger_gsu),
-
-#define IPDEF7(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(varscalar_gsu),0,0,NULL,NULL,NULL,0}
-#define IPDEF7R(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL|PM_DONTIMPORT_SUID},BR((void *)B),GSU(varscalar_gsu),0,0,NULL,NULL,NULL,0}
-#define IPDEF7U(A,B) {{NULL,A,PM_SCALAR|PM_SPECIAL|PM_UNSET},BR((void *)B),GSU(varscalar_gsu),0,0,NULL,NULL,NULL,0}
-IPDEF7("OPTARG", &zoptarg),
-IPDEF7("NULLCMD", &nullcmd),
-IPDEF7U("POSTEDIT", &postedit),
-IPDEF7("READNULLCMD", &readnullcmd),
-IPDEF7("PS1", &prompt),
-IPDEF7U("RPS1", &rprompt),
-IPDEF7U("RPROMPT", &rprompt),
-IPDEF7("PS2", &prompt2),
-IPDEF7U("RPS2", &rprompt2),
-IPDEF7U("RPROMPT2", &rprompt2),
-IPDEF7("PS3", &prompt3),
-IPDEF7R("PS4", &prompt4),
-IPDEF7("SPROMPT", &sprompt),
-
-#define IPDEF9(A,B,C,D) {{NULL,A,D|PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT},BR((void *)B),GSU(vararray_gsu),0,0,NULL,C,NULL,0}
-IPDEF9("*", &pparams, NULL, PM_ARRAY|PM_READONLY_SPECIAL|PM_DONTIMPORT),
-IPDEF9("@", &pparams, NULL, PM_ARRAY|PM_READONLY_SPECIAL|PM_DONTIMPORT),
-
-/*
- * This empty row indicates the end of parameters available in
- * all emulations.
- */
-{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,NULL,NULL,NULL,0},
-
-#define IPDEF8(A,B,C,D) {{NULL,A,D|PM_SCALAR|PM_SPECIAL},BR((void *)B),GSU(colonarr_gsu),0,0,NULL,C,NULL,0}
-IPDEF8("CDPATH", &cdpath, "cdpath", PM_TIED),
-IPDEF8("FIGNORE", &fignore, "fignore", PM_TIED),
-IPDEF8("FPATH", &fpath, "fpath", PM_TIED),
-IPDEF8("MAILPATH", &mailpath, "mailpath", PM_TIED),
-IPDEF8("PATH", &path, "path", PM_TIED),
-IPDEF8("PSVAR", &psvar, "psvar", PM_TIED),
-IPDEF8("ZSH_EVAL_CONTEXT", &zsh_eval_context, "zsh_eval_context", PM_READONLY_SPECIAL|PM_TIED),
-
-/* MODULE_PATH is not imported for security reasons */
-IPDEF8("MODULE_PATH", &module_path, "module_path", PM_DONTIMPORT|PM_TIED),
+ ROVAR_INTPM("!", &lastpid, 0),
+ ROVAR_INTPM("$", &mypid, 0),
+ ROVAR_INTPM("?", &lastval, 0),
+ ROVAR_INTPM("HISTCMD", &curhist, 0),
+ ROVAR_INTPM("LINENO", &lineno, 0),
+ ROVAR_INTPM("PPID", &ppid, 0),
+ ROVAR_INTPM("ZSH_SUBSHELL", &zsh_subshell, 0),
+
+ INTPM("COLUMNS", &zterm_columns, zlevar_gsu, 0),
+ INTPM("LINES", &zterm_lines, zlevar_gsu, 0),
+ INTPM("ZLE_RPROMPT_INDENT", &rprompt_indent, rprompt_indent_gsu, PM_UNSET),
+ VAR_INTPM("SHLVL", &shlvl, 0),
+ VAR_INTPM("FUNCNEST", &zsh_funcnest, 0),
+
+ /* Don't import internal integer status variables. */
+ VAR_INTPM("OPTIND", &zoptind, PM_DONTIMPORT),
+ VAR_INTPM("TRY_BLOCK_ERROR", &try_errflag, PM_DONTIMPORT),
+ VAR_INTPM("TRY_BLOCK_INTERRUPT", &try_interrupt, PM_DONTIMPORT),
+
+ VAR_STRPM("OPTARG", &zoptarg, 0),
+ VAR_STRPM("NULLCMD", &nullcmd, 0),
+ VAR_STRPM("POSTEDIT", &postedit, PM_UNSET),
+ VAR_STRPM("READNULLCMD", &readnullcmd, 0),
+ VAR_STRPM("PS1", &prompt, 0),
+ VAR_STRPM("RPS1", &rprompt, PM_UNSET),
+ VAR_STRPM("RPROMPT", &rprompt, PM_UNSET),
+ VAR_STRPM("PS2", &prompt2, 0),
+ VAR_STRPM("RPS2", &rprompt2, PM_UNSET),
+ VAR_STRPM("RPROMPT2", &rprompt2, PM_UNSET),
+ VAR_STRPM("PS3", &prompt3, 0),
+ VAR_STRPM("PS4", &prompt4, PM_DONTIMPORT_SUID),
+ VAR_STRPM("SPROMPT", &sprompt, 0),
+
+ VAR_ARRPM("*", &pparams, PM_READONLY_SPECIAL),
+ VAR_ARRPM("@", &pparams, PM_READONLY_SPECIAL),
+
+ /* End of parameters available in all emulations */
+ NULL_PM,
+
+ TIED_STRPM("CDPATH", &cdpath, "cdpath", PM_TIED),
+ TIED_STRPM("FIGNORE", &fignore, "fignore", PM_TIED),
+ TIED_STRPM("FPATH", &fpath, "fpath", PM_TIED),
+ TIED_STRPM("MAILPATH", &mailpath, "mailpath", PM_TIED),
+ TIED_STRPM("PATH", &path, "path", PM_TIED),
+ TIED_STRPM("PSVAR", &psvar, "psvar", PM_TIED),
+ TIED_STRPM("ZSH_EVAL_CONTEXT", &zsh_eval_context, "zsh_eval_context",
+ PM_READONLY_SPECIAL|PM_TIED),
+
+ /* MODULE_PATH is not imported for security reasons */
+ TIED_STRPM("MODULE_PATH", &module_path, "module_path",
+ PM_DONTIMPORT|PM_TIED),
-#define IPDEF10(A,B) {{NULL,A,PM_ARRAY|PM_SPECIAL},BR(NULL),GSU(B),10,0,NULL,NULL,NULL,0}
-
-/*
- * The following parameters are not available in sh/ksh compatibility *
- * mode.
- */
+ /*
+ * The following parameters are not available in sh/ksh compatibility *
+ * mode.
+ */
-/* All of these have sh compatible equivalents. */
-IPDEF1("ARGC", argc_gsu, PM_READONLY_SPECIAL),
-IPDEF2("HISTCHARS", histchars_gsu, PM_DONTIMPORT),
-IPDEF4("status", &lastval),
-IPDEF7("prompt", &prompt),
-IPDEF7("PROMPT", &prompt),
-IPDEF7("PROMPT2", &prompt2),
-IPDEF7("PROMPT3", &prompt3),
-IPDEF7("PROMPT4", &prompt4),
-IPDEF8("MANPATH", &manpath, "manpath", PM_TIED),
-IPDEF9("argv", &pparams, NULL, 0),
-IPDEF9("fignore", &fignore, "FIGNORE", PM_TIED),
-IPDEF9("cdpath", &cdpath, "CDPATH", PM_TIED),
-IPDEF9("fpath", &fpath, "FPATH", PM_TIED),
-IPDEF9("mailpath", &mailpath, "MAILPATH", PM_TIED),
-IPDEF9("manpath", &manpath, "MANPATH", PM_TIED),
-IPDEF9("psvar", &psvar, "PSVAR", PM_TIED),
-
-IPDEF9("zsh_eval_context", &zsh_eval_context, "ZSH_EVAL_CONTEXT", PM_TIED|PM_READONLY_SPECIAL),
-
-IPDEF9("module_path", &module_path, "MODULE_PATH", PM_TIED),
-IPDEF9("path", &path, "PATH", PM_TIED),
-
-/* These are known to zsh alone. */
-
-IPDEF10("pipestatus", pipestatus_gsu),
-
-{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,NULL,NULL,NULL,0},
+ /* All of these have sh compatible equivalents. */
+ INTPM("ARGC", NULL, argc_gsu, PM_READONLY_SPECIAL),
+ STRPM("HISTCHARS", NULL, histchars_gsu, PM_DONTIMPORT),
+ ROVAR_INTPM("status", &lastval, 0),
+ VAR_STRPM("prompt", &prompt, 0),
+ VAR_STRPM("PROMPT", &prompt, 0),
+ VAR_STRPM("PROMPT2", &prompt2, 0),
+ VAR_STRPM("PROMPT3", &prompt3, 0),
+ VAR_STRPM("PROMPT4", &prompt4, 0),
+ TIED_STRPM("MANPATH", &manpath, "manpath", PM_TIED),
+ VAR_ARRPM("argv", &pparams, 0),
+ TIED_ARRPM("fignore", &fignore, "FIGNORE", 0),
+ TIED_ARRPM("cdpath", &cdpath, "CDPATH", 0),
+ TIED_ARRPM("fpath", &fpath, "FPATH", 0),
+ TIED_ARRPM("mailpath", &mailpath, "MAILPATH", 0),
+ TIED_ARRPM("manpath", &manpath, "MANPATH", 0),
+ TIED_ARRPM("psvar", &psvar, "PSVAR", 0),
+
+ TIED_ARRPM("zsh_eval_context", &zsh_eval_context, "ZSH_EVAL_CONTEXT",
+ PM_READONLY_SPECIAL),
+
+ TIED_ARRPM("module_path", &module_path, "MODULE_PATH", 0),
+ TIED_ARRPM("path", &path, "PATH", 0),
+
+ /* These are known to zsh alone. */
+
+ PM("pipestatus", NULL, pipestatus_gsu, PM_ARRAY, 10, NULL),
+
+ NULL_PM,
};
/*
@@ -452,18 +469,18 @@ IPDEF10("pipestatus", pipestatus_gsu),
* sh emulation. These don't link to the array versions.
*/
static initparam special_params_sh[] = {
-IPDEF8("CDPATH", &cdpath, NULL, 0),
-IPDEF8("FIGNORE", &fignore, NULL, 0),
-IPDEF8("FPATH", &fpath, NULL, 0),
-IPDEF8("MAILPATH", &mailpath, NULL, 0),
-IPDEF8("PATH", &path, NULL, 0),
-IPDEF8("PSVAR", &psvar, NULL, 0),
-IPDEF8("ZSH_EVAL_CONTEXT", &zsh_eval_context, NULL, PM_READONLY_SPECIAL),
-
-/* MODULE_PATH is not imported for security reasons */
-IPDEF8("MODULE_PATH", &module_path, NULL, PM_DONTIMPORT),
-
-{{NULL,NULL,0},BR(NULL),NULL_GSU,0,0,NULL,NULL,NULL,0},
+ COLONARR_STRPM("CDPATH", &cdpath, 0),
+ COLONARR_STRPM("FIGNORE", &fignore, 0),
+ COLONARR_STRPM("FPATH", &fpath, 0),
+ COLONARR_STRPM("MAILPATH", &mailpath, 0),
+ COLONARR_STRPM("PATH", &path, 0),
+ COLONARR_STRPM("PSVAR", &psvar, 0),
+ COLONARR_STRPM("ZSH_EVAL_CONTEXT", &zsh_eval_context, PM_READONLY_SPECIAL),
+
+ /* MODULE_PATH is not imported for security reasons */
+ COLONARR_STRPM("MODULE_PATH", &module_path, PM_DONTIMPORT),
+
+ NULL_PM,
};
/*
@@ -471,9 +488,9 @@ IPDEF8("MODULE_PATH", &module_path, NULL, PM_DONTIMPORT),
* and $@, this is not readonly. This parameter is not directly
* visible in user space.
*/
-static initparam argvparam_pm = IPDEF9("", &pparams, NULL, \
- PM_ARRAY|PM_SPECIAL|PM_DONTIMPORT);
+static initparam argvparam_pm = VAR_ARRPM("", &pparams, 0);
+#undef PM
#undef BR
#define IS_UNSET_VALUE(V) \
Messages sorted by:
Reverse Date,
Date,
Thread,
Author