summaryrefslogtreecommitdiff
path: root/usr.bin/mg/echo.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/mg/echo.c')
-rw-r--r--usr.bin/mg/echo.c847
1 files changed, 463 insertions, 384 deletions
diff --git a/usr.bin/mg/echo.c b/usr.bin/mg/echo.c
index 3663cda638c..775be72fa7e 100644
--- a/usr.bin/mg/echo.c
+++ b/usr.bin/mg/echo.c
@@ -6,46 +6,39 @@
* of the display screen. Used by the entire
* known universe.
*/
-/*
- * The varargs lint directive comments are 0 an attempt to get lint to shup
- * up about CORRECT usage of varargs.h. It won't.
- */
#include "def.h"
#include "key.h"
-#ifdef LOCAL_VARARGS
-#include "varargs.h"
+#ifdef __STDC__
+#include <stdarg.h>
#else
#include <varargs.h>
#endif
#ifndef NO_MACRO
-# include "macro.h"
+#include "macro.h"
#endif
-static int veread();
-VOID ewprintf();
-static VOID eformat();
-static VOID eputi();
-static VOID eputl();
-static VOID eputs();
-static VOID eputc();
-static int complt();
-static int complt_list();
-LIST * make_file_list();
-LIST * copy_list();
-char * strrchr();
-extern LIST * complete_function_list();
-
-int epresf = FALSE; /* Stuff in echo line flag. */
+static VOID eformat __P((const char *, va_list));
+static int veread __P((const char *, char *buf, int, int, va_list));
+static VOID eputi __P((int, int));
+static VOID eputl __P((long, int));
+static VOID eputs __P((char *));
+static VOID eputc __P((char));
+static int complt __P((int, int, char *, int));
+static int complt_list __P((int, int, char *, int));
+static LIST *copy_list __P((LIST *));
+static VOID free_file_list __P((LIST *));
-extern int tthue;
+int epresf = FALSE; /* Stuff in echo line flag. */
/*
* Erase the echo line.
*/
VOID
-eerase() {
+eerase()
+{
+
ttcolor(CTEXT);
- ttmove(nrow-1, 0);
+ ttmove(nrow - 1, 0);
tteeol();
ttflush();
epresf = FALSE;
@@ -58,60 +51,75 @@ eerase() {
* for "no" and TRUE for "yes". No formatting
* services are available. No newline required.
*/
-eyorn(sp) char *sp; {
- register int s;
+int
+eyorn(sp)
+ char *sp;
+{
+ int s;
#ifndef NO_MACRO
- if(inmacro) return TRUE;
+ if (inmacro)
+ return TRUE;
#endif
ewprintf("%s? (y or n) ", sp);
for (;;) {
s = getkey(FALSE);
- if (s == 'y' || s == 'Y') return TRUE;
- if (s == 'n' || s == 'N') return FALSE;
- if (s == CCHR('G')) return ctrlg(FFRAND, 1);
+ if (s == 'y' || s == 'Y')
+ return TRUE;
+ if (s == 'n' || s == 'N')
+ return FALSE;
+ if (s == CCHR('G'))
+ return ctrlg(FFRAND, 1);
ewprintf("Please answer y or n. %s? (y or n) ", sp);
}
- /*NOTREACHED*/
+ /* NOTREACHED */
}
/*
* Like eyorn, but for more important question. User must type either all of
* "yes" or "no", and the trainling newline.
*/
-eyesno(sp) char *sp; {
- register int s;
- char buf[64];
+int
+eyesno(sp)
+ char *sp;
+{
+ int s;
+ char buf[64];
#ifndef NO_MACRO
- if(inmacro) return TRUE;
+ if (inmacro)
+ return TRUE;
#endif
s = ereply("%s? (yes or no) ", buf, sizeof(buf), sp);
for (;;) {
- if (s == ABORT) return ABORT;
+ if (s == ABORT)
+ return ABORT;
if (s != FALSE) {
#ifndef NO_MACRO
if (macrodef) {
- LINE *lp = maclcur;
+ LINE *lp = maclcur;
- maclcur = lp->l_bp;
- maclcur->l_fp = lp->l_fp;
- free((char *)lp);
+ maclcur = lp->l_bp;
+ maclcur->l_fp = lp->l_fp;
+ free((char *) lp);
}
#endif
if ((buf[0] == 'y' || buf[0] == 'Y')
- && (buf[1] == 'e' || buf[1] == 'E')
- && (buf[2] == 's' || buf[2] == 'S')
- && (buf[3] == '\0')) return TRUE;
+ && (buf[1] == 'e' || buf[1] == 'E')
+ && (buf[2] == 's' || buf[2] == 'S')
+ && (buf[3] == '\0'))
+ return TRUE;
if ((buf[0] == 'n' || buf[0] == 'N')
- && (buf[1] == 'o' || buf[0] == 'O')
- && (buf[2] == '\0')) return FALSE;
+ && (buf[1] == 'o' || buf[0] == 'O')
+ && (buf[2] == '\0'))
+ return FALSE;
}
s = ereply("Please answer yes or no. %s? (yes or no) ",
buf, sizeof(buf), sp);
}
- /*NOTREACHED*/
+ /* NOTREACHED */
}
+
/*
* Write out a prompt, and read back a
* reply. The prompt is now written out with full "ewprintf"
@@ -119,21 +127,30 @@ eyesno(sp) char *sp; {
* place. This is always a new message, there is no auto
* completion, and the return is echoed as such.
*/
-/*VARARGS 0*/
+/* VARARGS */
+int
+#ifdef __STDC__
+ereply(const char *fmt, char *buf, int nbuf, ...)
+#else
ereply(va_alist)
-va_dcl
+ va_dcl
+#endif
{
- va_list pvar;
- register char *fp, *buf;
- register int nbuf;
- register int i;
-
- va_start(pvar);
- fp = va_arg(pvar, char *);
- buf = va_arg(pvar, char *);
- nbuf = va_arg(pvar, int);
- i = veread(fp, buf, nbuf, EFNEW|EFCR, &pvar);
- va_end(pvar);
+ va_list ap;
+ int i;
+#ifdef __STDC__
+ va_start(ap, nbuf);
+#else
+ char *fmt, *buf;
+ int nbuf;
+
+ va_start(ap);
+ fmt = va_arg(ap, char *);
+ buf = va_arg(ap, char *);
+ nbuf = va_arg(ap, int);
+#endif
+ i = veread(fmt, buf, nbuf, EFNEW | EFCR, ap);
+ va_end(ap);
return i;
}
@@ -146,40 +163,62 @@ va_dcl
* new prompt), an EFFUNC (autocomplete), or EFCR (echo
* the carriage return as CR).
*/
-/* VARARGS 0 */
+/* VARARGS */
+int
+#ifdef __STDC__
+eread(const char *fmt, char *buf, int nbuf, int flag, ...)
+#else
eread(va_alist)
-va_dcl
+ char *fmt;
+ char *buf;
+ int nbuf;
+ int flag;
+ va_dcl
+#endif
{
- va_list pvar;
- char *fp, *buf;
- int nbuf, flag, i;
- va_start(pvar);
- fp = va_arg(pvar, char *);
- buf = va_arg(pvar, char *);
- nbuf = va_arg(pvar, int);
- flag = va_arg(pvar, int);
- i = veread(fp, buf, nbuf, flag, &pvar);
- va_end(pvar);
+ int i;
+ va_list ap;
+#ifdef __STDC__
+ va_start(ap, flag);
+#else
+ char *fmt, *buf;
+ int nbuf;
+
+ va_start(ap);
+ fmt = va_arg(ap, char *);
+ buf = va_arg(ap, char *);
+ nbuf = va_arg(ap, int);
+ flag = va_arg(ap, int);
+#endif
+ i = veread(fmt, buf, nbuf, flag, ap);
+ va_end(ap);
return i;
}
-static veread(fp, buf, nbuf, flag, ap) char *fp; char *buf; va_list *ap; {
- register int cpos;
- register int i;
- register int c;
+static int
+veread(fp, buf, nbuf, flag, ap)
+ const char *fp;
+ char *buf;
+ int nbuf;
+ int flag;
+ va_list ap;
+{
+ int cpos;
+ int i;
+ int c;
#ifndef NO_MACRO
- if(inmacro) {
- bcopy(maclcur->l_text, buf, maclcur->l_used);
- buf[maclcur->l_used] = '\0';
- maclcur = maclcur->l_fp;
- return TRUE;
+ if (inmacro) {
+ bcopy(maclcur->l_text, buf, maclcur->l_used);
+ buf[maclcur->l_used] = '\0';
+ maclcur = maclcur->l_fp;
+ return TRUE;
}
#endif
cpos = 0;
- if ((flag&EFNEW)!=0 || ttrow!=nrow-1) {
+ if ((flag & EFNEW) != 0 || ttrow != nrow - 1) {
ttcolor(CTEXT);
- ttmove(nrow-1, 0);
+ ttmove(nrow - 1, 0);
epresf = TRUE;
} else
eputc(' ');
@@ -188,50 +227,52 @@ static veread(fp, buf, nbuf, flag, ap) char *fp; char *buf; va_list *ap; {
ttflush();
for (;;) {
c = getkey(FALSE);
- if ((flag&EFAUTO) != 0 && (c == ' ' || c == CCHR('I'))) {
+ if ((flag & EFAUTO) != 0 && (c == ' ' || c == CCHR('I'))) {
cpos += complt(flag, c, buf, cpos);
continue;
}
- if ((flag&EFAUTO) != 0 && c == '?') {
+ if ((flag & EFAUTO) != 0 && c == '?') {
complt_list(flag, c, buf, cpos);
continue;
}
switch (c) {
- case CCHR('J'):
- c = CCHR('M'); /* and continue */
- case CCHR('M'): /* Return, done. */
- if ((flag&EFFUNC) != 0) {
+ case CCHR('J'):
+ c = CCHR('M'); /* and continue */
+ case CCHR('M'):/* Return, done. */
+ if ((flag & EFFUNC) != 0) {
if ((i = complt(flag, c, buf, cpos)) == 0)
continue;
- if (i > 0) cpos += i;
+ if (i > 0)
+ cpos += i;
}
buf[cpos] = '\0';
- if ((flag&EFCR) != 0) {
+ if ((flag & EFCR) != 0) {
ttputc(CCHR('M'));
ttflush();
}
#ifndef NO_MACRO
- if(macrodef) {
- LINE *lp;
-
- if((lp = lalloc(cpos)) == NULL) return FALSE;
- lp->l_fp = maclcur->l_fp;
- maclcur->l_fp = lp;
- lp->l_bp = maclcur;
- maclcur = lp;
- bcopy(buf, lp->l_text, cpos);
+ if (macrodef) {
+ LINE *lp;
+
+ if ((lp = lalloc(cpos)) == NULL)
+ return FALSE;
+ lp->l_fp = maclcur->l_fp;
+ maclcur->l_fp = lp;
+ lp->l_bp = maclcur;
+ maclcur = lp;
+ bcopy(buf, lp->l_text, cpos);
}
#endif
goto done;
- case CCHR('G'): /* Bell, abort. */
+ case CCHR('G'): /* Bell, abort. */
eputc(CCHR('G'));
(VOID) ctrlg(FFRAND, 0);
ttflush();
return ABORT;
- case CCHR('H'):
- case CCHR('?'): /* Rubout, erase. */
+ case CCHR('H'):
+ case CCHR('?'): /* Rubout, erase. */
if (cpos != 0) {
ttputc('\b');
ttputc(' ');
@@ -247,8 +288,8 @@ static veread(fp, buf, nbuf, flag, ap) char *fp; char *buf; va_list *ap; {
}
break;
- case CCHR('X'): /* C-X */
- case CCHR('U'): /* C-U, kill line. */
+ case CCHR('X'): /* C-X */
+ case CCHR('U'): /* C-U, kill line. */
while (cpos != 0) {
ttputc('\b');
ttputc(' ');
@@ -264,8 +305,8 @@ static veread(fp, buf, nbuf, flag, ap) char *fp; char *buf; va_list *ap; {
ttflush();
break;
- case CCHR('W'): /* C-W, kill to beginning of */
- /* previous word */
+ case CCHR('W'): /* C-W, kill to beginning of */
+ /* previous word */
/* back up to first word character or beginning */
while ((cpos > 0) && !ISWORD(buf[cpos - 1])) {
ttputc('\b');
@@ -294,11 +335,11 @@ static veread(fp, buf, nbuf, flag, ap) char *fp; char *buf; va_list *ap; {
ttflush();
break;
- case CCHR('\\'):
- case CCHR('Q'): /* C-Q, quote next */
- c = getkey(FALSE); /* and continue */
- default: /* All the rest. */
- if (cpos < nbuf-1) {
+ case CCHR('\\'):
+ case CCHR('Q'): /* C-Q, quote next */
+ c = getkey(FALSE); /* and continue */
+ default: /* All the rest. */
+ if (cpos < nbuf - 1) {
buf[cpos++] = (char) c;
eputc((char) c);
ttflush();
@@ -311,254 +352,270 @@ done: return buf[0] != '\0';
/*
* do completion on a list of objects.
*/
-static int complt(flags, c, buf, cpos)
-register char *buf;
-register int cpos;
+static int
+complt(flags, c, buf, cpos)
+ int flags;
+ int c;
+ char *buf;
+ int cpos;
{
- register LIST *lh, *lh2;
- LIST *wholelist = NULL;
- int i, nxtra;
- int nhits, bxtra;
- int wflag = FALSE;
- int msglen, nshown;
- char *msg;
-
- if ((flags&EFFUNC) != 0) {
- buf[cpos] = '\0';
- i = complete_function(buf, c);
- if(i>0) {
- eputs(&buf[cpos]);
- ttflush();
- return i;
- }
- switch(i) {
+ LIST *lh, *lh2;
+ LIST *wholelist = NULL;
+ int i, nxtra;
+ int nhits, bxtra;
+ int wflag = FALSE;
+ int msglen, nshown;
+ char *msg;
+
+ if ((flags & EFFUNC) != 0) {
+ buf[cpos] = '\0';
+ i = complete_function(buf, c);
+ if (i > 0) {
+ eputs(&buf[cpos]);
+ ttflush();
+ return i;
+ }
+ switch (i) {
case -3:
- msg = " [Ambiguous]";
- break;
+ msg = " [Ambiguous]";
+ break;
case -2:
- i=0;
- msg = " [No match]";
- break;
+ i = 0;
+ msg = " [No match]";
+ break;
case -1:
case 0:
- return i;
+ return i;
default:
- msg = " [Internal error]";
- break;
- }
+ msg = " [Internal error]";
+ break;
+ }
} else {
- if ((flags&EFBUF) != 0) lh = &(bheadp->b_list);
- else if ((flags&EFFILE) != 0) {
- buf[cpos] = '\0';
- wholelist = lh = make_file_list(buf,0);
- }
- else panic("broken complt call: flags");
+ if ((flags & EFBUF) != 0)
+ lh = &(bheadp->b_list);
+ else if ((flags & EFFILE) != 0) {
+ buf[cpos] = '\0';
+ wholelist = lh = make_file_list(buf, 0);
+ } else
+ panic("broken complt call: flags");
- if (c == ' ') wflag = TRUE;
- else if (c != '\t' && c != CCHR('M')) panic("broken complt call: c");
+ if (c == ' ')
+ wflag = TRUE;
+ else if (c != '\t' && c != CCHR('M'))
+ panic("broken complt call: c");
- nhits = 0;
- nxtra = HUGE;
+ nhits = 0;
+ nxtra = HUGE;
- while (lh != NULL) {
- for (i=0; i<cpos; ++i) {
- if (buf[i] != lh->l_name[i])
- break;
- }
- if (i == cpos) {
- if (nhits == 0)
- lh2 = lh;
- ++nhits;
- if (lh->l_name[i] == '\0') nxtra = -1;
- else {
- bxtra = getxtra(lh, lh2, cpos, wflag);
- if (bxtra < nxtra) nxtra = bxtra;
- lh2 = lh;
+ while (lh != NULL) {
+ for (i = 0; i < cpos; ++i) {
+ if (buf[i] != lh->l_name[i])
+ break;
+ }
+ if (i == cpos) {
+ if (nhits == 0)
+ lh2 = lh;
+ ++nhits;
+ if (lh->l_name[i] == '\0')
+ nxtra = -1;
+ else {
+ bxtra = getxtra(lh, lh2, cpos, wflag);
+ if (bxtra < nxtra)
+ nxtra = bxtra;
+ lh2 = lh;
+ }
}
+ lh = lh->l_next;
}
- lh = lh->l_next;
- }
- if (nhits == 0)
- msg = " [No match]";
- else if (nhits > 1 && nxtra == 0)
- msg = " [Ambiguous]";
- else { /* Got a match, do it to it */
- /*
- * Being lazy - ought to check length, but all things
- * autocompleted have known types/lengths.
- */
- if (nxtra < 0 && nhits > 1 && c == ' ') nxtra = 1;
- for (i = 0; i < nxtra; ++i) {
- buf[cpos] = lh2->l_name[cpos];
- eputc(buf[cpos++]);
+ if (nhits == 0)
+ msg = " [No match]";
+ else if (nhits > 1 && nxtra == 0)
+ msg = " [Ambiguous]";
+ else { /* Got a match, do it to it */
+ /*
+ * Being lazy - ought to check length, but all things
+ * autocompleted have known types/lengths.
+ */
+ if (nxtra < 0 && nhits > 1 && c == ' ')
+ nxtra = 1;
+ for (i = 0; i < nxtra; ++i) {
+ buf[cpos] = lh2->l_name[cpos];
+ eputc(buf[cpos++]);
+ }
+ ttflush();
+ free_file_list(wholelist);
+ if (nxtra < 0 && c != CCHR('M'))
+ return 0;
+ return nxtra;
}
- ttflush();
- free_file_list(wholelist);
- if (nxtra < 0 && c != CCHR('M')) return 0;
- return nxtra;
- }
}
- /* wholelist is null if we are doing buffers. want to free
- * lists that were created for us, but not the buffer list! */
+ /*
+ * wholelist is null if we are doing buffers. want to free lists
+ * that were created for us, but not the buffer list!
+ */
free_file_list(wholelist);
/* Set up backspaces, etc., being mindful of echo line limit */
msglen = strlen(msg);
nshown = (ttcol + msglen + 2 > ncol) ?
- ncol - ttcol - 2 : msglen;
+ ncol - ttcol - 2 : msglen;
eputs(msg);
- ttcol -= (i = nshown); /* update ttcol! */
- while (i--) /* move back before msg */
+ ttcol -= (i = nshown); /* update ttcol! */
+ while (i--) /* move back before msg */
ttputc('\b');
- ttflush(); /* display to user */
+ ttflush(); /* display to user */
i = nshown;
- while (i--) /* blank out on next flush */
+ while (i--) /* blank out on next flush */
eputc(' ');
- ttcol -= (i = nshown); /* update ttcol on BS's */
+ ttcol -= (i = nshown); /* update ttcol on BS's */
while (i--)
- ttputc('\b'); /* update ttcol again! */
+ ttputc('\b'); /* update ttcol again! */
return 0;
}
/*
* do completion on a list of objects, listing instead of completing
*/
-static int complt_list(flags, c, buf, cpos)
-register char *buf;
-register int cpos;
+static int
+complt_list(flags, c, buf, cpos)
+ int flags;
+ int c;
+ char *buf;
+ int cpos;
{
- register LIST *lh, *lh2, *lh3;
- LIST *wholelist = NULL;
- int i,maxwidth,width;
- int preflen = 0;
- BUFFER *bp;
- static VOID findbind();
- int oldrow = ttrow;
- int oldcol = ttcol;
- int oldhue = tthue;
- char linebuf[NCOL+1];
- char *cp;
+ LIST *lh, *lh2, *lh3;
+ LIST *wholelist = NULL;
+ int i, maxwidth, width;
+ int preflen = 0;
+ BUFFER *bp;
+ int oldrow = ttrow;
+ int oldcol = ttcol;
+ int oldhue = tthue;
+ char linebuf[NCOL + 1];
+ char *cp;
ttflush();
/* the results are put into a help buffer */
-
bp = bfind("*help*", TRUE);
- if(bclear(bp) == FALSE) return FALSE;
+ if (bclear(bp) == FALSE)
+ return FALSE;
- { /* this {} present for historical reasons */
+ { /* this {} present for historical reasons */
-/*
- * first get the list of objects. This list may contain only the
- * ones that complete what has been typed, or may be the whole list
- * of all objects of this type. They are filtered later in any case.
- * set wholelist if the list has been cons'ed up just for us, so we
- * can free it later. We have to copy the buffer list for this
- * function even though we didn't for complt. The sorting code
- * does destructive changes to the list, which we don't want to
- * happen to the main buffer list!
- */
- if ((flags&EFBUF) != 0)
- wholelist = lh = copy_list (&(bheadp->b_list));
- else if ((flags&EFFUNC) != 0) {
- buf[cpos] = '\0';
- wholelist = lh = complete_function_list(buf, c);
- }
- else if ((flags&EFFILE) != 0) {
- buf[cpos] = '\0';
- wholelist = lh = make_file_list(buf,1);
/*
- * we don't want to display stuff up to the / for file names
- * preflen is the list of a prefix of what the user typed
- * that should not be displayed.
+ * first get the list of objects. This list may contain only
+ * the ones that complete what has been typed, or may be the
+ * whole list of all objects of this type. They are filtered
+ * later in any case. Set wholelist if the list has been
+ * cons'ed up just for us, so we can free it later. We have
+ * to copy the buffer list for this function even though we
+ * didn't for complt. The sorting code does destructive
+ * changes to the list, which we don't want to happen to the
+ * main buffer list!
*/
- cp = strrchr(buf,'/');
- if (cp)
- preflen = cp - buf + 1;
- }
- else panic("broken complt call: flags");
-
-
-/* sort the list, since users expect to see it in alphabetic order */
-
- lh2 = lh;
- while (lh2) {
- lh3 = lh2->l_next;
- while (lh3) {
- if (strcmp(lh2->l_name, lh3->l_name) > 0) {
- cp = lh2->l_name;
- lh2->l_name = lh3->l_name;
- lh3->l_name = cp;
- }
- lh3 = lh3->l_next;
- }
- lh2 = lh2->l_next;
- }
+ if ((flags & EFBUF) != 0)
+ wholelist = lh = copy_list(&(bheadp->b_list));
+ else if ((flags & EFFUNC) != 0) {
+ buf[cpos] = '\0';
+ wholelist = lh = complete_function_list(buf, c);
+ } else if ((flags & EFFILE) != 0) {
+ buf[cpos] = '\0';
+ wholelist = lh = make_file_list(buf, 1);
+ /*
+ * We don't want to display stuff up to the / for file
+ * names preflen is the list of a prefix of what the
+ * user typed that should not be displayed.
+ */
+ cp = strrchr(buf, '/');
+ if (cp)
+ preflen = cp - buf + 1;
+ } else
+ panic("broken complt call: flags");
-/*
- * first find max width of object to be displayed, so we can
- * put several on a line
- */
- maxwidth = 0;
- lh2 = lh;
- while (lh2 != NULL) {
- for (i=0; i<cpos; ++i) {
- if (buf[i] != lh2->l_name[i])
- break;
- }
- if (i == cpos) {
- width = strlen(lh2->l_name);
- if (width > maxwidth)
- maxwidth = width;
+ /*
+ * Sort the list, since users expect to see it in alphabetic
+ * order.
+ */
+ lh2 = lh;
+ while (lh2) {
+ lh3 = lh2->l_next;
+ while (lh3) {
+ if (strcmp(lh2->l_name, lh3->l_name) > 0) {
+ cp = lh2->l_name;
+ lh2->l_name = lh3->l_name;
+ lh3->l_name = cp;
+ }
+ lh3 = lh3->l_next;
+ }
+ lh2 = lh2->l_next;
}
- lh2 = lh2->l_next;
- }
- maxwidth += 1 - preflen;
-/*
- * now do the display. objects are written into linebuf until it
- * fills, and then put into the help buffer.
- */
- cp = linebuf;
- width = 0;
- lh2 = lh;
- while (lh2 != NULL) {
- for (i=0; i<cpos; ++i) {
- if (buf[i] != lh2->l_name[i])
- break;
+ /*
+ * First find max width of object to be displayed, so we can
+ * put several on a line.
+ */
+ maxwidth = 0;
+ lh2 = lh;
+ while (lh2 != NULL) {
+ for (i = 0; i < cpos; ++i) {
+ if (buf[i] != lh2->l_name[i])
+ break;
+ }
+ if (i == cpos) {
+ width = strlen(lh2->l_name);
+ if (width > maxwidth)
+ maxwidth = width;
+ }
+ lh2 = lh2->l_next;
}
- if (i == cpos) {
- if ((width + maxwidth) > ncol) {
- *cp = 0;
- addline(bp,linebuf);
- cp = linebuf;
- width = 0;
+ maxwidth += 1 - preflen;
+
+ /*
+ * Now do the display. objects are written into linebuf until
+ * it fills, and then put into the help buffer.
+ */
+ cp = linebuf;
+ width = 0;
+ lh2 = lh;
+ while (lh2 != NULL) {
+ for (i = 0; i < cpos; ++i) {
+ if (buf[i] != lh2->l_name[i])
+ break;
}
- strcpy(cp,lh2->l_name+preflen);
- i = strlen(lh2->l_name+preflen);
- cp += i;
- for (; i < maxwidth; i++)
- *cp++ = ' ';
- width += maxwidth;
+ if (i == cpos) {
+ if ((width + maxwidth) > ncol) {
+ *cp = 0;
+ addline(bp, linebuf);
+ cp = linebuf;
+ width = 0;
+ }
+ strcpy(cp, lh2->l_name + preflen);
+ i = strlen(lh2->l_name + preflen);
+ cp += i;
+ for (; i < maxwidth; i++)
+ *cp++ = ' ';
+ width += maxwidth;
+ }
+ lh2 = lh2->l_next;
+ }
+ if (width > 0) {
+ *cp = 0;
+ addline(bp, linebuf);
}
- lh2 = lh2->l_next;
- }
- if (width > 0) {
- *cp = 0;
- addline(bp,linebuf);
- }
- }
- /*
- * note that we free lists only if they are put in wholelist
- * lists that were built just for us should be freed. However
- * when we use the buffer list, obviously we don't want it
- * freed.
+ }
+ /*
+ * Note that we free lists only if they are put in wholelist lists
+ * that were built just for us should be freed. However when we use
+ * the buffer list, obviously we don't want it freed.
*/
free_file_list(wholelist);
- popbuftop(bp); /* split the screen and put up the help buffer */
- update(); /* needed to make the new stuff actually appear */
- ttmove(oldrow,oldcol); /* update leaves cursor in arbitrary place */
- ttcolor(oldhue); /* with arbitrary color */
+ popbuftop(bp); /* split the screen and put up the help
+ * buffer */
+ update(); /* needed to make the new stuff actually
+ * appear */
+ ttmove(oldrow, oldcol); /* update leaves cursor in arbitrary place */
+ ttcolor(oldhue); /* with arbitrary color */
ttflush();
return 0;
}
@@ -569,16 +626,24 @@ register int cpos;
* Return the longest block of characters that can be
* autocompleted at this point. Sometimes the two
* symbols are the same, but this is normal.
- */
-getxtra(lp1, lp2, cpos, wflag) register LIST *lp1, *lp2; register int wflag; {
- register int i;
+ */
+int
+getxtra(lp1, lp2, cpos, wflag)
+ LIST *lp1, *lp2;
+ int cpos;
+ int wflag;
+{
+ int i;
i = cpos;
for (;;) {
- if (lp1->l_name[i] != lp2->l_name[i]) break;
- if (lp1->l_name[i] == '\0') break;
+ if (lp1->l_name[i] != lp2->l_name[i])
+ break;
+ if (lp1->l_name[i] == '\0')
+ break;
++i;
- if (wflag && !ISWORD(lp1->l_name[i-1])) break;
+ if (wflag && !ISWORD(lp1->l_name[i - 1]))
+ break;
}
return (i - cpos);
}
@@ -590,23 +655,34 @@ getxtra(lp1, lp2, cpos, wflag) register LIST *lp1, *lp2; register int wflag; {
* echo line. The formatting is done by a call
* to the standard formatting routine.
*/
-/*VARARGS 0 */
+/* VARARGS */
VOID
+#ifdef __STDC__
+ewprintf(const char *fmt, ...)
+#else
ewprintf(va_alist)
-va_dcl
+ va_dcl
+#endif
{
- va_list pvar;
- register char *fp;
+ va_list ap;
+#ifndef __STDC__
+ char *fmt;
+#endif
#ifndef NO_MACRO
- if(inmacro) return;
+ if (inmacro)
+ return;
+#endif
+#ifdef __STDC__
+ va_start(ap, fmt);
+#else
+ va_start(ap);
+ fmt = va_arg(ap, char *);
#endif
- va_start(pvar);
- fp = va_arg(pvar, char *);
ttcolor(CTEXT);
- ttmove(nrow-1, 0);
- eformat(fp, &pvar);
- va_end(pvar);
+ ttmove(nrow - 1, 0);
+ eformat(fmt, ap);
+ va_end(ap);
tteeol();
ttflush();
epresf = TRUE;
@@ -623,13 +699,12 @@ va_dcl
*/
static VOID
eformat(fp, ap)
-register char *fp;
-register va_list *ap;
+ const char *fp;
+ va_list ap;
{
- register int c;
- char kname[NKNAME];
- char *keyname();
- char *cp;
+ int c;
+ char kname[NKNAME];
+ char *cp;
while ((c = *fp++) != '\0') {
if (c != '%')
@@ -638,37 +713,37 @@ register va_list *ap;
c = *fp++;
switch (c) {
case 'c':
- (VOID) keyname(kname, va_arg(*ap, int));
+ (VOID) keyname(kname, va_arg(ap, int));
eputs(kname);
break;
case 'k':
cp = kname;
- for(c=0; c < key.k_count; c++) {
- cp = keyname(cp, key.k_chars[c]);
- *cp++ = ' ';
+ for (c = 0; c < key.k_count; c++) {
+ cp = keyname(cp, key.k_chars[c]);
+ *cp++ = ' ';
}
*--cp = '\0';
eputs(kname);
break;
case 'd':
- eputi(va_arg(*ap, int), 10);
+ eputi(va_arg(ap, int), 10);
break;
case 'o':
- eputi(va_arg(*ap, int), 8);
+ eputi(va_arg(ap, int), 8);
break;
case 's':
- eputs(va_arg(*ap, char *));
+ eputs(va_arg(ap, char *));
break;
- case 'l':/* explicit longword */
+ case 'l': /* explicit longword */
c = *fp++;
- switch(c) {
+ switch (c) {
case 'd':
- eputl((long)va_arg(*ap, long), 10);
+ eputl((long) va_arg(ap, long), 10);
break;
default:
eputc(c);
@@ -688,18 +763,18 @@ register va_list *ap;
*/
static VOID
eputi(i, r)
-register int i;
-register int r;
+ int i;
+ int r;
{
- register int q;
+ int q;
- if(i<0) {
- eputc('-');
- i = -i;
+ if (i < 0) {
+ eputc('-');
+ i = -i;
}
- if ((q=i/r) != 0)
+ if ((q = i / r) != 0)
eputi(q, r);
- eputc(i%r+'0');
+ eputc(i % r + '0');
}
/*
@@ -707,18 +782,18 @@ register int r;
*/
static VOID
eputl(l, r)
-register long l;
-register int r;
+ long l;
+ int r;
{
- register long q;
+ long q;
- if(l < 0) {
- eputc('-');
- l = -l;
+ if (l < 0) {
+ eputc('-');
+ l = -l;
}
- if ((q=l/r) != 0)
+ if ((q = l / r) != 0)
eputl(q, r);
- eputc((int)(l%r)+'0');
+ eputc((int) (l % r) + '0');
}
/*
@@ -726,9 +801,9 @@ register int r;
*/
static VOID
eputs(s)
-register char *s;
+ char *s;
{
- register int c;
+ int c;
while ((c = *s++) != '\0')
eputc(c);
@@ -741,9 +816,10 @@ register char *s;
*/
static VOID
eputc(c)
-register char c;
+ char c;
{
- if (ttcol+2 < ncol) {
+
+ if (ttcol + 2 < ncol) {
if (ISCTRL(c)) {
eputc('^');
c = CCHR(c);
@@ -753,29 +829,32 @@ register char c;
}
}
+static VOID
free_file_list(lp)
- LIST *lp;
+ LIST *lp;
{
-LIST *next;
-while (lp) {
- next = lp->l_next;
- free(lp);
- lp = next;
-}
+ LIST *next;
+
+ while (lp) {
+ next = lp->l_next;
+ free(lp);
+ lp = next;
+ }
}
-LIST *copy_list(lp)
- LIST *lp;
+static LIST *
+copy_list(lp)
+ LIST *lp;
{
-LIST *current,*last;
-
-last = NULL;
-while(lp) {
- current = (LIST *)malloc(sizeof(LIST));
- current->l_next = last;
- current->l_name = lp->l_name;
- last = (LIST *)current;
- lp = lp->l_next;
-}
-return(last);
+ LIST *current, *last;
+
+ last = NULL;
+ while (lp) {
+ current = (LIST *) malloc(sizeof(LIST));
+ current->l_next = last;
+ current->l_name = lp->l_name;
+ last = (LIST *) current;
+ lp = lp->l_next;
+ }
+ return (last);
}