summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/mg/buffer.c93
1 files changed, 19 insertions, 74 deletions
diff --git a/usr.bin/mg/buffer.c b/usr.bin/mg/buffer.c
index 3459ff9e380..c80da333497 100644
--- a/usr.bin/mg/buffer.c
+++ b/usr.bin/mg/buffer.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: buffer.c,v 1.10 2001/05/23 15:46:25 art Exp $ */
+/* $OpenBSD: buffer.c,v 1.11 2001/05/23 15:50:27 art Exp $ */
/*
* Buffer handling.
@@ -8,7 +8,6 @@
#include "kbd.h" /* needed for modes */
#include <stdarg.h>
-static RSIZE itor __P((char *, int, RSIZE));
static BUFFER *makelist __P((void));
/*
@@ -207,15 +206,9 @@ listbuffers(f, n)
static BUFFER *
makelist()
{
- char *cp1;
- char *cp2;
- int c;
- BUFFER *bp;
+ int w = ncol / 2;
+ BUFFER *bp, *blp;
LINE *lp;
- RSIZE nbytes;
- BUFFER *blp;
- char b[6 + 1];
- char line[NBUFN+128];
if ((blp = bfind("*Buffer List*", TRUE)) == NULL)
return NULL;
@@ -223,32 +216,13 @@ makelist()
return NULL;
blp->b_flag &= ~BFCHG; /* Blow away old. */
- (VOID) strcpy(line, " MR Buffer");
- cp1 = line + 10;
- while (cp1 < line + 4 + NBUFN + 1)
- *cp1++ = ' ';
- (VOID) strcpy(cp1, "Size File");
- if (addline(blp, line) == FALSE)
- return NULL;
- (VOID) strcpy(line, " -- ------");
- cp1 = line + 10;
- while (cp1 < line + 4 + NBUFN + 1)
- *cp1++ = ' ';
- (VOID) strcpy(cp1, "---- ----");
- if (addline(blp, line) == FALSE)
+ if (addlinef(blp, "%-*s%s", w, " MR Buffer", "Size File") == FALSE ||
+ addlinef(blp, "%-*s%s", w, " -- ------", "---- ----") == FALSE)
return NULL;
- bp = bheadp; /* For all buffers */
- while (bp != NULL) {
- cp1 = &line[0]; /* Start at left edge */
- *cp1++ = (bp == curbp) ? '.' : ' ';
- *cp1++ = ((bp->b_flag & BFCHG) != 0) ? '*' : ' ';
- *cp1++ = ' '; /* Gap. */
- *cp1++ = ' ';
- cp2 = &bp->b_bname[0]; /* Buffer name */
- while ((c = *cp2++) != 0)
- *cp1++ = c;
- while (cp1 < &line[4 + NBUFN + 1])
- *cp1++ = ' ';
+
+ for (bp = bheadp; bp != NULL; bp = bp->b_bufp) {
+ RSIZE nbytes;
+
nbytes = 0; /* Count bytes in buf. */
if (bp != blp) {
lp = lforw(bp->b_linep);
@@ -259,22 +233,17 @@ makelist()
if (nbytes)
nbytes--; /* no bonus newline */
}
- (VOID) itor(b, 6, nbytes); /* 6 digit buffer size. */
- cp2 = &b[0];
- while ((c = *cp2++) != 0)
- *cp1++ = c;
- *cp1++ = ' '; /* Gap.. */
- cp2 = &bp->b_fname[0]; /* File name */
- if (*cp2 != 0) {
- while ((c = *cp2++) != 0) {
- if (cp1 < &line[128 - 1])
- *cp1++ = c;
- }
- }
- *cp1 = 0; /* Add to the buffer. */
- if (addline(blp, line) == FALSE)
+
+ if (addlinef(blp, "%c%c%c %-*s%-6d %-*s",
+ (bp == curbp) ? '.' : ' ', /* current buffer ? */
+ ((bp->b_flag & BFCHG) != 0) ? '*' : ' ', /* changed ? */
+ ' ', /* no readonly buffers yet */
+ w - 4, /* four chars already written */
+ bp->b_bname, /* buffer name */
+ nbytes, /* buffer size */
+ w - 7, /* seven chars already written */
+ bp->b_fname) == FALSE)
return NULL;
- bp = bp->b_bufp;
}
blp->b_dotp = lforw(blp->b_linep); /* put dot at beginning of
* buffer */
@@ -283,30 +252,6 @@ makelist()
}
/*
- * Used above.
- */
-static RSIZE
-itor(buf, width, num)
- char *buf;
- int width;
- RSIZE num;
-{
- RSIZE r;
-
- if (num / 10 == 0) {
- buf[0] = (num % 10) + '0';
- for (r = 1; r < width; buf[r++] = ' ');
- buf[width] = '\0';
- return 1;
- } else {
- buf[r = itor(buf, width, num / (RSIZE) 10)] =
- (num % (RSIZE) 10) + '0';
- return r + 1;
- }
- /* NOTREACHED */
-}
-
-/*
* The argument "text" points to a format string. Append this line to the
* buffer. Handcraft the EOL on the end. Return TRUE if it worked and
* FALSE if you ran out of room.