zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: Geoff Wing <mason@primenet.com.au>, zsh-workers@math.gatech.edu
Subject: Re: bodgy COLUMNS coredump
Date: Thu, 22 Aug 1996 23:27:49 -0700	[thread overview]
Message-ID: <960822232749.ZM18359@candle.brasslantern.com> (raw)
In-Reply-To: Geoff Wing <mason@primenet.com.au> "bodgy COLUMNS coredump" (Aug 23,  2:32pm)

On Aug 23,  2:32pm, Geoff Wing wrote:
} Subject: bodgy COLUMNS coredump
}
} +     columns = COLUMNS;		/* sanity */

If you're going to do this, all the references to COLUMNS in other places
can probably be backed out.  Really, sanity of `columns' should be forced
wherever it is initialized or reset, and the COLUMNS macro could go away.
To do that right requires a special *setfn for COLUMNS and LINES, rather
than using intvarsetfn.

The following also fixes PSVAR and FIGNORE so they can be set to empty,
rather than having an empty assignment set them to "." (dot).  I don't
know whether MANPATH should have this behavior or not, so I left it
alone.

Note that this simply disables ZLE if COLUMNS is set to less than 2;
it probably ought to disable it at 10 columns or so, but ....  Also,
SINGLELINEZLE is enabled when LINES is set to 1.

Index: Src/builtin.c
--- zsh-3.0.0/Src/builtin.c	Wed Aug 14 08:06:54 1996
+++ zsh-3.0.0-build/Src/builtin.c	Thu Aug 22 22:57:18 1996
@@ -4314,7 +4314,7 @@
 		l = t;
 
 	sc = l + 2;
-	nc = (COLUMNS + 1) / sc;
+	nc = (columns + 1) / sc;
 	if (!nc)
 	    nc = 1;
 	nr = (n + nc - 1) / nc;
Index: Src/hashtable.h
--- zsh-3.0.0/Src/hashtable.h	Tue Aug 13 18:13:18 1996
+++ zsh-3.0.0-build/Src/hashtable.h	Thu Aug 22 23:08:23 1996
@@ -134,11 +134,11 @@
 IPDEF4("LINENO", &lineno),
 IPDEF4("PPID", &ppid),
 
-#define IPDEF5(A,B) {NULL,A,PM_INTEGER|PM_SPECIAL,NULL,IFN(intvarsetfn),IFN(intvargetfn),10,(void *)B,NULL,NULL,NULL,0}
-IPDEF5("COLUMNS", &columns),
-IPDEF5("LINES", &lines),
-IPDEF5("OPTIND", &zoptind),
-IPDEF5("SHLVL", &shlvl),
+#define IPDEF5(A,B,F) {NULL,A,PM_INTEGER|PM_SPECIAL,NULL,IFN(F),IFN(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,NULL,IFN(nullsetfn),IFN(strvargetfn),0,(void *)B,NULL,NULL,NULL,0}
 IPDEF6("PWD", &pwd),
@@ -158,13 +158,13 @@
 IPDEF7("SPROMPT", &sprompt),
 IPDEF7("0", &argzero),
 
-#define IPDEF8(A,B,C) {NULL,A,PM_SCALAR|PM_SPECIAL,NULL,IFN(colonarrsetfn),IFN(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("PSVAR", &psvar, "psvar"),
+#define IPDEF8(A,B,C,F) {NULL,A,PM_SCALAR|PM_SPECIAL,NULL,IFN(F),IFN(colonarrgetfn),0,(void *)B,NULL,C,NULL,0}
+IPDEF8("CDPATH", &cdpath, "cdpath", colonarrsetfn),
+IPDEF8("FIGNORE", &fignore, "fignore", colonarr2setfn),
+IPDEF8("FPATH", &fpath, "fpath", colonarrsetfn),
+IPDEF8("MAILPATH", &mailpath, "mailpath", colonarr2setfn),
+IPDEF8("WATCH", &watch, "watch", colonarrsetfn),
+IPDEF8("PSVAR", &psvar, "psvar", colonarr2setfn),
 
 {NULL, "PATH", PM_SPECIAL,NULL, IFN(colonpathsetfn), IFN(colonpathgetfn), 0, (void *) NULL, NULL, "path", NULL, 0},
 
@@ -183,7 +183,7 @@
 IPDEF7("PROMPT2", &prompt2),
 IPDEF7("PROMPT3", &prompt3),
 IPDEF7("PROMPT4", &prompt4),
-IPDEF8("MANPATH", &manpath, "manpath"),
+IPDEF8("MANPATH", &manpath, "manpath", colonarrsetfn),
 IPDEF9("argv", 0, &pparams, NULL),
 IPDEF9("fignore", 0, &fignore, "FIGNORE"),
 IPDEF9("cdpath", 0, &cdpath, "CDPATH"),
Index: Src/init.c
--- zsh-3.0.0/Src/init.c	Thu Aug 15 09:42:16 1996
+++ zsh-3.0.0-build/Src/init.c	Thu Aug 22 22:28:59 1996
@@ -535,8 +535,12 @@
 #ifdef TIOCGWINSZ
     if (!(columns = shttyinfo.winsize.ws_col))
 	columns = 80;
+    if (columns < 2)
+	opts[USEZLE] = 0;
     if (!(lines = shttyinfo.winsize.ws_row))
 	lines = 24;
+    if (lines < 2)
+	opts[SINGLELINEZLE] = 1;
 #else
     columns = 80;
     lines = 24;
Index: Src/jobs.c
--- zsh-3.0.0/Src/jobs.c	Wed Jul 31 11:13:17 1996
+++ zsh-3.0.0-build/Src/jobs.c	Thu Aug 22 22:59:42 1996
@@ -221,7 +221,7 @@
 {
     Process pn;
     int job = jn - jobtab, len = 9, sig, sflag = 0, llen;
-    int conted = 0, lineleng = COLUMNS, skip = 0, doputnl = 0;
+    int conted = 0, lineleng = columns, skip = 0, doputnl = 0;
     FILE *fout = (synch == 2) ? stdout : shout;
 
     if (jn->stat & STAT_NOPRINT)
Index: Src/params.c
--- zsh-3.0.0/Src/params.c	Sun Aug  4 05:52:33 1996
+++ zsh-3.0.0-build/Src/params.c	Thu Aug 22 23:13:08 1996
@@ -1223,6 +1223,31 @@
     *((long *)pm->data) = x;
 }
 
+/* Function to set value of any ZLE-related integer *
+ * parameter.  data is pointer to global variable   *
+ * where the value is to be stored.                 */
+
+/**/
+void
+zlevarsetfn(Param pm, long x)
+{
+    if (x < 2) {
+	if ((long *)pm->data == & columns) {
+	    if (x <= 0)
+		x = 80;		/* Arbitary, but same as init.c */
+	    else
+		x = 2;
+	    opts[USEZLE] = 0;
+	} else if ((long *)pm->data == & lines) {
+	    if (x <= 0)
+		x = 24;		/* Arbitrary, but same as init.c */
+	    else
+		opts[SINGLELINEZLE] = 1;
+	}
+    }
+    *((long *)pm->data) = x;
+}
+
 /* Function to set value of generic special scalar    *
  * parameter.  data is pointer to a character pointer *
  * representing the scalar (string).                  */
@@ -1317,11 +1342,21 @@
     char ***dptr = (char ***)pm->data;
 
     freearray(*dptr);
-    if (pm->data == (void *) & mailpath && x && !*x) {
+    *dptr = x ? colonfix(x, pm->ename ? pm->nam : NULL, pm->flags & PM_UNIQUE) : mkarray(NULL);
+}
+
+/**/
+void
+colonarr2setfn(Param pm, char *x)
+{
+    char ***dptr = (char ***)pm->data;
+
+    if (x && !*x) {
+	freearray(*dptr);
 	zsfree(x);
 	*dptr = mkarray(NULL);
     } else
-	*dptr = x ? colonfix(x, pm->ename ? pm->nam : NULL, pm->flags & PM_UNIQUE) : mkarray(NULL);
+	colonarrsetfn(pm, x);
 }
 
 /* Function to get the value of special (scalar)        *
Index: Src/utils.c
--- zsh-3.0.0/Src/utils.c	Wed Aug 14 09:18:34 1996
+++ zsh-3.0.0-build/Src/utils.c	Thu Aug 22 22:31:24 1996
@@ -844,6 +844,10 @@
     if (shttyinfo.winsize.ws_row)
 	lines = shttyinfo.winsize.ws_row;
     if (oldcols != columns) {
+	if (columns < 2)
+	    opts[USEZLE] = 0;
+	if (lines < 2)
+	    opts[SINGLELINEZLE] = 1;
 	if (zleactive) {
 	    resetneeded = winchanged = 1;
 	    refresh();
Index: Src/zle_misc.c
--- zsh-3.0.0/Src/zle_misc.c	Tue Aug 13 13:24:14 1996
+++ zsh-3.0.0-build/Src/zle_misc.c	Thu Aug 22 22:59:51 1996
@@ -835,8 +835,8 @@
     if (wp) {
 	*wp = bp - bl0 - lensb;
 	if (pmpt != rpmpt) {
-	    *wp %= COLUMNS;
-	    if (*wp == COLUMNS - 1) {
+	    *wp %= columns;
+	    if (*wp == columns - 1) {
 		addbufspc(1);
 		*wp = 0;
 		*bp++ = ' ';
Index: Src/zle_refresh.c
--- zsh-3.0.0/Src/zle_refresh.c	Sun Aug 11 18:39:05 1996
+++ zsh-3.0.0-build/Src/zle_refresh.c	Thu Aug 22 23:00:07 1996
@@ -66,7 +66,7 @@
     int ln;
     static int lwinw = -1, lwinh = -1;	/* last window width & height */
  
-    winw = COLUMNS;  /* terminal width */
+    winw = columns;  /* terminal width */
     if (isset(SINGLELINEZLE) || termok != TERM_OK)
 	winh = 1;
     else
@@ -247,7 +247,7 @@
 	    moveto(0, pptw);
 	}
 	clearf = clearflag;
-    } else if (winw != COLUMNS)
+    } else if (winw != columns)
 	resetvideo();
 
 /* now winw equals columns; now all width comparisons can be made to winw */
Index: Src/zle_tricky.c
--- zsh-3.0.0/Src/zle_tricky.c	Sun Aug 11 12:15:35 1996
+++ zsh-3.0.0-build/Src/zle_tricky.c	Thu Aug 22 23:00:39 1996
@@ -3469,7 +3469,7 @@
 	} else {
 	    cc++;
 	    if (*p == '\n') {
-		l += 1 + (cc / COLUMNS);
+		l += 1 + (cc / columns);
 		cc = 0;
 	    }
 	    if (dopr)
@@ -3477,7 +3477,7 @@
 	}
     }
 
-    return l + (cc / COLUMNS);
+    return l + (cc / columns);
 }
 
 /* List the matches.  Note that the list entries are metafied. */
@@ -3551,7 +3551,7 @@
 	longest++;
 
     fw = longest + 2;
-    fct = (COLUMNS + 1) / fw;
+    fct = (columns + 1) / fw;
     if (fct == 0) {
 	fct = 1;
 	colsz = ct;
@@ -3559,7 +3559,7 @@
 	for (ap = arr; *ap; ap++)
 	    up += (niceztrlen(*ap + off) - nboff + of +
 		(ispattern ? 0 :
-		(!(haswhat & HAS_MISC) ? nfpl + nfsl : nlpl + nlsl))) / COLUMNS;
+		(!(haswhat & HAS_MISC) ? nfpl + nfsl : nlpl + nlsl))) / columns;
     } else {
 	colsz = (ct + fct - 1) / fct;
 	up = colsz + nlnct - clearflag;
@@ -3739,11 +3739,11 @@
     while (t0)
 	t0 /= 10, longest++;
     /* to compensate for added ')' */
-    fct = (COLUMNS - 1) / (longest + 3);
+    fct = (columns - 1) / (longest + 3);
     if (fct == 0)
 	fct = 1;
     else
-	fw = (COLUMNS - 1) / fct;
+	fw = (columns - 1) / fct;
     colsz = (ct + fct - 1) / fct;
     for (t1 = 0; t1 != colsz; t1++) {
 	ap = arr + t1;
Index: Src/zsh.h
--- zsh-3.0.0/Src/zsh.h	Mon Aug 12 10:57:32 1996
+++ zsh-3.0.0-build/Src/zsh.h	Thu Aug 22 22:56:55 1996
@@ -1246,8 +1246,6 @@
 #define txtchangeisset(X)	(txtchange & (X))
 #define txtchangeset(X, Y)	(txtchange |= (X), txtchange &= ~(Y))
 
-#define COLUMNS      (columns < 1 ? 80 : columns)
-
 /****************************************/
 /* Definitions for the %_ prompt escape */
 /****************************************/

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"


  reply	other threads:[~1996-08-23  6:27 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-08-23  4:32 Geoff Wing
1996-08-23  6:27 ` Bart Schaefer [this message]
1996-08-23  4:37 Geoff Wing

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=960822232749.ZM18359@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=mason@primenet.com.au \
    --cc=schaefer@nbn.com \
    --cc=zsh-workers@math.gatech.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).