summaryrefslogtreecommitdiffstats
path: root/text-utils/more.c
diff options
context:
space:
mode:
authorKarel Zak2006-12-07 00:26:24 +0100
committerKarel Zak2006-12-07 00:26:24 +0100
commitd162fcb550a77875c8f58fda0e0a0bd91f211c99 (patch)
treebd984959acd465b3058bd805f216d29dc0c3c1a6 /text-utils/more.c
parentImported from util-linux-2.12i tarball. (diff)
downloadkernel-qcow2-util-linux-d162fcb550a77875c8f58fda0e0a0bd91f211c99.tar.gz
kernel-qcow2-util-linux-d162fcb550a77875c8f58fda0e0a0bd91f211c99.tar.xz
kernel-qcow2-util-linux-d162fcb550a77875c8f58fda0e0a0bd91f211c99.zip
Imported from util-linux-2.12j tarball.
Diffstat (limited to 'text-utils/more.c')
-rw-r--r--text-utils/more.c276
1 files changed, 74 insertions, 202 deletions
diff --git a/text-utils/more.c b/text-utils/more.c
index f8fe34760..63d46e8b1 100644
--- a/text-utils/more.c
+++ b/text-utils/more.c
@@ -70,6 +70,9 @@
#define Fseek(f,off) (file_pos=off,fseek(f,off,0))
#define Getc(f) (++file_pos, getc(f))
#define Ungetc(c,f) (--file_pos, ungetc(c,f))
+#define putcerr(c) fputc(c, stderr)
+#define putserr(s) fputs(s, stderr)
+#define putsout(s) fputs(s, stdout)
#define stty(fd,argp) tcsetattr(fd,TCSANOW,argp)
@@ -94,8 +97,6 @@ void screen (register FILE *f, register int num_lines);
int command (char *filename, register FILE *f);
void erasep (register int col);
void show (register char ch);
-int pr(char *s1);
-int printd (int n);
void set_tty(void);
void reset_tty(void);
void ttyin (unsigned char buf[], register int nmax, char pchar);
@@ -103,10 +104,7 @@ int number(char *cmd);
int readch (void);
int get_line(register FILE *f, int *length);
void prbuf (register char *s, register int n);
-int xprintf (char *fmt, ...);
void execute (char *filename, char *cmd, ...);
-void errwrite (char *txt);
-void errwrite1 (char *sym);
FILE *checkf (char *, int *);
#define TBUFSIZ 1024
@@ -182,7 +180,7 @@ extern char PC; /* pad character */
static void
my_putstring(char *s) {
- putp(s);
+ tputs (s, 1, putchar); /* putp(s); */
}
static void
@@ -412,14 +410,14 @@ int main(int argc, char **argv) {
erasep (0);
if (clreol)
cleareol ();
- pr("::::::::::::::");
+ putsout("::::::::::::::");
if (promptlen > 14)
erasep (14);
- xprintf ("\n");
+ putchar('\n');
if(clreol) cleareol();
- xprintf("%s\n", fnames[fnum]);
+ puts(fnames[fnum]);
if(clreol) cleareol();
- xprintf("::::::::::::::\n");
+ puts("::::::::::::::");
if (left > Lpp - 4)
left = Lpp - 4;
}
@@ -483,10 +481,8 @@ void argscan(char *s, char *argv0) {
case '-': case ' ': case '\t':
break;
default:
- fputs(argv0,stderr);
- fputs(": unknown option \"-",stderr);
- putc(*s,stderr);
- fputs("\"\n",stderr);
+ fprintf(stderr,
+ _("%s: unknown option \"-%c\"\n"), argv0, *s);
usage(argv0);
exit(1);
break;
@@ -518,7 +514,7 @@ checkf (fs, clearfirst)
return((FILE *)NULL);
}
if ((stbuf.st_mode & S_IFMT) == S_IFDIR) {
- xprintf(_("\n*** %s: directory ***\n\n"), fs);
+ printf(_("\n*** %s: directory ***\n\n"), fs);
return((FILE *)NULL);
}
if ((f = Fopen(fs, "r")) == NULL) {
@@ -561,7 +557,7 @@ magic(f, fs)
case 0411:
case 0177545:
case 0x457f: /* simple ELF detection */
- xprintf(_("\n******** %s: Not a text file ********\n\n"), fs);
+ printf(_("\n******** %s: Not a text file ********\n\n"), fs);
(void)fclose(f);
return(1);
}
@@ -664,9 +660,7 @@ void onquit(int dummy) {
Pause++;
}
else if (!dum_opt && notell) {
- char *s = _("[Use q or Q to quit]");
- errwrite(s);
- promptlen += strlen(s);
+ promptlen += fprintf(stderr, _("[Use q or Q to quit]"));
notell = 0;
}
signal(SIGQUIT, onquit);
@@ -712,7 +706,7 @@ void end_it (int dummy) {
fflush (stdout);
}
else
- errwrite("\n");
+ putcerr('\n');
_exit(0);
}
@@ -723,93 +717,7 @@ void copy_file(register FILE *f) {
putchar(c);
}
-/* Simplified printf function */
-
-int xprintf (char *fmt, ...) {
- va_list ap;
- char ch;
- int ccount;
-
- ccount = 0;
- va_start(ap, fmt);
- while (*fmt) {
- while ((ch = *fmt++) != '%') {
- if (ch == '\0')
- return (ccount);
- ccount++;
- putchar (ch);
- }
- switch (*fmt++) {
- case 'd':
- ccount += printd (va_arg(ap, int));
- break;
- case 's':
- ccount += pr (va_arg(ap, char *));
- break;
- case '%':
- ccount++;
- putchar ('%');
- break;
- case '0':
- return (ccount);
- default:
- break;
- }
- }
- va_end(ap);
- return (ccount);
-
-}
-
-/*
-** Print an integer as a string of decimal digits,
-** returning the length of the print representation.
-*/
-
-int printd (int n)
-{
- int a, nchars;
-
- if ((a = n/10) != 0)
- nchars = 1 + printd(a);
- else
- nchars = 1;
- putchar (n % 10 + '0');
- return (nchars);
-}
-
-/* Put the print representation of an integer into a string */
-static char *sptr;
-
-static void Sprintf (int n) {
- int a;
-
- if ((a = n/10) != 0)
- Sprintf (a);
- *sptr++ = n % 10 + '0';
-}
-
-static void scanstr (int n, char *str)
-{
- sptr = str;
- Sprintf (n);
- *sptr = '\0';
-}
-
-#define ringbell() errwrite("\007");
-
-#ifdef undef
-strlen (s)
-char *s;
-{
- register char *p;
-
- p = s;
- while (*p++)
- ;
- return (p - s - 1);
-}
-#endif
+#define ringbell() putcerr('\007')
/* See whether the last component of the path name "path" is equal to the
** string "string"
@@ -844,15 +752,14 @@ static void prompt (char *filename)
}
if (clreol)
cleareol ();
- promptlen += pr(_("--More--"));
+ promptlen += printf(_("--More--"));
if (filename != NULL) {
- promptlen += xprintf (_("(Next file: %s)"), filename);
+ promptlen += printf(_("(Next file: %s)"), filename);
} else if (!no_intty) {
- promptlen += xprintf ("(%d%%)",
- (int)((file_pos * 100) / file_size));
+ promptlen += printf("(%d%%)", (int) ((file_pos * 100) / file_size));
}
if (dum_opt) {
- promptlen += pr(_("[Press space to continue, 'q' to quit.]"));
+ promptlen += printf(_("[Press space to continue, 'q' to quit.]"));
}
if (Senter && Sexit)
my_putstring (Sexit);
@@ -1119,21 +1026,6 @@ void clreos()
my_putstring(EodClr);
}
-/*
-** Print string and return number of characters
-*/
-
-int pr(char *s1)
-{
- register char *s;
- register char c;
-
- for (s = s1; (c = *s++) != 0; )
- putchar(c);
- return (int) (s - s1 - 1);
-}
-
-
/* Print a buffer of n characters */
void prbuf (register char *s, register int n)
@@ -1165,7 +1057,7 @@ void prbuf (register char *s, register int n)
if (c != ' ' || pstate == 0 || state != 0 || ulglitch == 0)
putchar(c);
if (state && *chUL) {
- pr(chBS);
+ putsout(chBS);
my_putstring(chUL);
}
pstate = state;
@@ -1262,16 +1154,16 @@ int command (char *filename, register FILE *f)
putchar ('\r');
erasep (0);
- xprintf ("\n");
+ putchar('\n');
if (clreol)
cleareol ();
if (nlines != 1)
- xprintf (_("...back %d pages"), nlines);
+ printf(_("...back %d pages"), nlines);
else
- xprintf (_("...back 1 page"));
+ putsout(_("...back 1 page"));
if (clreol)
cleareol ();
- pr ("\n");
+ putchar('\n');
initline = Currline - dlines * (nlines + 1);
if (! noscroll)
@@ -1307,17 +1199,17 @@ int command (char *filename, register FILE *f)
nlines *= dlines;
putchar ('\r');
erasep (0);
- xprintf ("\n");
+ putchar('\n');
if (clreol)
cleareol ();
if (nlines == 1)
- xprintf (_("...skipping one line"));
+ putsout(_("...skipping one line"));
else
- xprintf (_("...skipping %d lines"), nlines);
+ printf(_("...skipping %d lines"), nlines);
if (clreol)
cleareol ();
- pr ("\n");
+ putchar('\n');
while (nlines > 0) {
while ((c = Getc (f)) != '\n')
@@ -1350,7 +1242,7 @@ int command (char *filename, register FILE *f)
case '\'':
if (!no_intty) {
kill_line ();
- pr (_("\n***Back***\n\n"));
+ putsout(_("\n***Back***\n\n"));
Fseek (f, context.chrctr);
Currline = context.line;
ret (dlines);
@@ -1361,7 +1253,7 @@ int command (char *filename, register FILE *f)
}
case '=':
kill_line ();
- promptlen = printd (Currline);
+ promptlen = printf("%d", Currline);
fflush (stdout);
break;
case 'n':
@@ -1369,16 +1261,16 @@ int command (char *filename, register FILE *f)
case '/':
if (nlines == 0) nlines++;
kill_line ();
- pr ("/");
+ putchar('/');
promptlen = 1;
fflush (stdout);
if (lastp) {
- errwrite ("\r");
+ putcerr('\r');
search (NULL, f, nlines); /* Use previous r.e. */
}
else {
ttyin (cmdbuf, sizeof(cmdbuf)-2, '/');
- errwrite("\r");
+ putcerr('\r');
search (cmdbuf, f, nlines);
}
ret (dlines-1);
@@ -1388,13 +1280,13 @@ int command (char *filename, register FILE *f)
case '?':
case 'h':
if (noscroll) doclear();
- xprintf(_("\n"
+ putsout(_("\n"
"Most commands optionally preceded by integer argument k. "
"Defaults in brackets.\n"
"Star (*) indicates argument becomes new default.\n"));
- xprintf("---------------------------------------"
- "----------------------------------------\n");
- xprintf(_(
+ puts("---------------------------------------"
+ "----------------------------------------");
+ putsout(_(
"<space> Display next k lines of text [current screen size]\n"
"z Display next k lines of text [current screen size]*\n"
"<return> Display next k lines of text [1]*\n"
@@ -1414,8 +1306,8 @@ int command (char *filename, register FILE *f)
":p Go to kth previous file [1]\n"
":f Display current file name and line number\n"
". Repeat previous command\n"));
- xprintf("---------------------------------------"
- "----------------------------------------\n");
+ puts("---------------------------------------"
+ "----------------------------------------");
prompt(filename);
break;
case 'v': /* This case should go right before default */
@@ -1441,17 +1333,14 @@ int command (char *filename, register FILE *f)
else
p = editor;
if (!strcmp(p, "vi") || !strcmp(p, "ex")) {
- strcpy(cmdbuf, "-c ");
- scanstr(n, &cmdbuf[3]);
+ sprintf(cmdbuf, "-c %d", n);
split = 1;
} else {
- cmdbuf[0] = '+';
- scanstr(n, &cmdbuf[1]);
+ sprintf(cmdbuf, "+%d", n);
}
kill_line();
- pr(editor); putchar(' ');
- pr(cmdbuf); putchar(' '); pr(fnames[fnum]);
+ printf("%s %s %s", editor, cmdbuf, fnames[fnum]);
if (split) {
cmdbuf[2] = 0;
execute(filename, editor, editor, cmdbuf,
@@ -1467,12 +1356,12 @@ int command (char *filename, register FILE *f)
kill_line ();
if (Senter && Sexit) {
my_putstring (Senter);
- promptlen = pr (_("[Press 'h' for instructions.]"))
+ promptlen = printf(_("[Press 'h' for instructions.]"))
+ 2 * soglitch;
my_putstring (Sexit);
}
else
- promptlen = pr (_("[Press 'h' for instructions.]"));
+ promptlen = printf(_("[Press 'h' for instructions.]"));
fflush (stdout);
}
else
@@ -1506,9 +1395,9 @@ int colon (char *filename, int cmd, int nlines) {
case 'f':
kill_line ();
if (!no_intty)
- promptlen = xprintf (_("\"%s\" line %d"), fnames[fnum], Currline);
+ promptlen = printf(_("\"%s\" line %d"), fnames[fnum], Currline);
else
- promptlen = xprintf (_("[Not a file] line %d"), Currline);
+ promptlen = printf(_("[Not a file] line %d"), Currline);
fflush (stdout);
return (-1);
case 'n':
@@ -1575,11 +1464,11 @@ void do_shell (char *filename)
char *expanded;
kill_line ();
- pr ("!");
+ putchar('!');
fflush (stdout);
promptlen = 1;
if (lastp)
- pr (shell_line);
+ putsout(shell_line);
else {
ttyin (cmdbuf, sizeof(cmdbuf)-2, '!');
expanded = 0;
@@ -1592,16 +1481,16 @@ void do_shell (char *filename)
free(expanded);
}
if (rc < 0) {
- errwrite(_(" Overflow\n"));
+ putserr(_(" Overflow\n"));
prompt (filename);
return;
} else if (rc > 0) {
kill_line ();
- promptlen = xprintf ("!%s", shell_line);
+ promptlen = printf("!%s", shell_line);
}
}
fflush (stdout);
- errwrite("\n");
+ putcerr('\n');
promptlen = 0;
shellp = 1;
execute (filename, shell, shell, "-c", shell_line, 0);
@@ -1636,10 +1525,10 @@ void search(char buf[], FILE *file, register int n)
if (--n == 0) {
if (lncount > 3 || (lncount > 1 && no_intty))
{
- pr ("\n");
+ putchar('\n');
if (clreol)
cleareol ();
- pr(_("...skipping\n"));
+ putsout(_("...skipping\n"));
}
if (!no_intty) {
Currline -= (lncount >= 3 ? 3 : lncount);
@@ -1663,8 +1552,7 @@ void search(char buf[], FILE *file, register int n)
else
doclear ();
}
- pr (Line);
- putchar ('\n');
+ puts(Line);
}
break;
}
@@ -1681,7 +1569,7 @@ void search(char buf[], FILE *file, register int n)
Fseek (file, startline);
}
else {
- pr (_("\nPattern not found\n"));
+ putsout(_("\nPattern not found\n"));
end_it (0);
}
error (_("Pattern not found"));
@@ -1731,7 +1619,7 @@ void execute (char *filename, char *cmd, ...)
va_end(argp);
execvp (cmd, args);
- errwrite(_("exec failed\n"));
+ putserr(_("exec failed\n"));
exit (1);
}
if (id > 0) {
@@ -1745,9 +1633,9 @@ void execute (char *filename, char *cmd, ...)
if (catch_susp)
signal(SIGTSTP, onsusp);
} else
- errwrite(_("can't fork\n"));
+ putserr(_("can't fork\n"));
set_tty ();
- pr ("------------------------\n");
+ puts("------------------------");
prompt (filename);
}
/*
@@ -1784,19 +1672,17 @@ void skipf (register int nskip)
fnum += nskip;
if (fnum < 0)
fnum = 0;
- pr (_("\n...Skipping "));
- pr ("\n");
+ puts(_("\n...Skipping "));
if (clreol)
cleareol ();
if (nskip > 0)
- pr (_("...Skipping to file "));
+ putsout(_("...Skipping to file "));
else
- pr (_("...Skipping back to file "));
- pr (fnames[fnum]);
- pr ("\n");
+ putsout(_("...Skipping back to file "));
+ puts(fnames[fnum]);
if (clreol)
cleareol ();
- pr ("\n");
+ putchar('\n');
--fnum;
}
@@ -1946,9 +1832,9 @@ static char *BSB = "\b \b";
static char *CARAT = "^";
#define ERASEONECOLUMN \
if (docrterase) \
- errwrite(BSB); \
+ putserr(BSB); \
else \
- errwrite(BS);
+ putserr(BS);
void ttyin (unsigned char buf[], register int nmax, char pchar) {
unsigned char *sp;
@@ -2040,7 +1926,7 @@ void ttyin (unsigned char buf[], register int nmax, char pchar) {
erasep (1);
else if (docrtkill)
while (promptlen-- > 1)
- errwrite(BSB);
+ putserr(BSB);
promptlen = 1;
}
sp = buf;
@@ -2057,12 +1943,11 @@ void ttyin (unsigned char buf[], register int nmax, char pchar) {
*sp++ = c;
if ((c < ' ' && c != '\n' && c != ESC) || c == RUBOUT) {
c += (c == RUBOUT) ? -0100 : 0100;
- errwrite(CARAT);
+ putserr(CARAT);
promptlen++;
}
if (c != '\n' && c != ESC) {
- char cbuf = c;
- errwrite1(&cbuf);
+ putcerr(c);
promptlen++;
}
else
@@ -2134,28 +2019,15 @@ int expand (char **outbuf, char *inbuf) {
}
void show (char c) {
- char cbuf;
-
if ((c < ' ' && c != '\n' && c != ESC) || c == RUBOUT) {
c += (c == RUBOUT) ? -0100 : 0100;
- errwrite(CARAT);
+ putserr(CARAT);
promptlen++;
}
- cbuf = c;
- errwrite1(&cbuf);
+ putcerr(c);
promptlen++;
}
-void errwrite (char *txt)
-{
- write (fileno(stderr), txt, strlen(txt));
-}
-
-void errwrite1 (char *sym)
-{
- write (fileno(stderr), sym, 1);
-}
-
void error (char *mess)
{
if (clreol)
@@ -2165,11 +2037,11 @@ void error (char *mess)
promptlen += strlen (mess);
if (Senter && Sexit) {
my_putstring (Senter);
- pr(mess);
+ putsout(mess);
my_putstring (Sexit);
}
else
- pr (mess);
+ putsout(mess);
fflush(stdout);
errors++;
siglongjmp (restore, 1);
@@ -2185,7 +2057,7 @@ void set_tty () {
static int
ourputch(int c) {
- return putc(c, stdout);
+ return putc(c, stdout);
}
void
@@ -2193,7 +2065,7 @@ reset_tty () {
if (no_tty)
return;
if (pstate) {
- tputs(ULexit, 1, ourputch);
+ tputs(ULexit, 1, ourputch); /* putchar - if that isnt a macro */
fflush(stdout);
pstate = 0;
}