Works, but is a bit slower than expected (Linux bug?).
This commit is contained in:
parent
50a51a6093
commit
4b63fa3513
|
@ -0,0 +1,36 @@
|
||||||
|
version 5.0
|
||||||
|
set nocompatible
|
||||||
|
let cpo_save=&cpo
|
||||||
|
set cpo=B
|
||||||
|
map! <xHome> <Home>
|
||||||
|
map! <xEnd> <End>
|
||||||
|
map! <S-xF4> <S-F4>
|
||||||
|
map! <S-xF3> <S-F3>
|
||||||
|
map! <S-xF2> <S-F2>
|
||||||
|
map! <S-xF1> <S-F1>
|
||||||
|
map! <xF4> <F4>
|
||||||
|
map! <xF3> <F3>
|
||||||
|
map! <xF2> <F2>
|
||||||
|
map! <xF1> <F1>
|
||||||
|
map <F8> :cn
|
||||||
|
map <xHome> <Home>
|
||||||
|
map <xEnd> <End>
|
||||||
|
map <S-xF4> <S-F4>
|
||||||
|
map <S-xF3> <S-F3>
|
||||||
|
map <S-xF2> <S-F2>
|
||||||
|
map <S-xF1> <S-F1>
|
||||||
|
map <xF4> <F4>
|
||||||
|
map <xF3> <F3>
|
||||||
|
map <xF2> <F2>
|
||||||
|
map <xF1> <F1>
|
||||||
|
map! }I\begin{yyplcwendO
|
||||||
|
map! >I<yypa/O
|
||||||
|
let &cpo=cpo_save
|
||||||
|
unlet cpo_save
|
||||||
|
set autoindent
|
||||||
|
set exrc
|
||||||
|
set number
|
||||||
|
set ruler
|
||||||
|
set shiftwidth=4
|
||||||
|
set showmatch
|
||||||
|
set textwidth=72
|
|
@ -0,0 +1,13 @@
|
||||||
|
include GNUmakevars
|
||||||
|
include GNUmakerules
|
||||||
|
|
||||||
|
all: slowcat
|
||||||
|
install: $(BINDIR)/slowcat
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.bak *.o core slowcat
|
||||||
|
|
||||||
|
distclean: clean
|
||||||
|
rm -f *.d
|
||||||
|
|
||||||
|
-include *.d
|
|
@ -0,0 +1,70 @@
|
||||||
|
#include <assert.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
char *cmnd;
|
||||||
|
|
||||||
|
static void usage(void) {
|
||||||
|
fprintf(stderr, "Usage: %s [-d delay] file ...\n", cmnd);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void do_cat(FILE *fp, double delay) {
|
||||||
|
int c;
|
||||||
|
|
||||||
|
while ((c = getc(fp)) != EOF) {
|
||||||
|
putchar(c);
|
||||||
|
usleep(delay * 1E6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
int rc = 0;
|
||||||
|
int c;
|
||||||
|
double delay = 0.5;
|
||||||
|
|
||||||
|
cmnd = argv[0];
|
||||||
|
|
||||||
|
while ((c = getopt(argc, argv, "d:")) != EOF) {
|
||||||
|
char *p;
|
||||||
|
switch (c) {
|
||||||
|
case 'd':
|
||||||
|
p = NULL;
|
||||||
|
delay = strtod(optarg, &p);
|
||||||
|
if (!p || *p) usage();
|
||||||
|
if (delay < 0 || delay > ULONG_MAX / 1E6) usage();
|
||||||
|
break;
|
||||||
|
case '?':
|
||||||
|
usage();
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setvbuf(stdout, NULL, _IONBF, 0);
|
||||||
|
|
||||||
|
if (optind == argc) {
|
||||||
|
do_cat(stdin, delay);
|
||||||
|
} else {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = optind; i < argc; i++) {
|
||||||
|
FILE *fp = fopen(argv[i], "r");
|
||||||
|
if (fp) {
|
||||||
|
do_cat(fp, delay);
|
||||||
|
fclose(fp);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "%s: cannot open %s for reading: %s\n",
|
||||||
|
argv[0], argv[i], strerror(errno));
|
||||||
|
rc++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
Loading…
Reference in New Issue