1 c42a1d3d 2006-02-21 devnull #include "a.h"
4 c42a1d3d 2006-02-21 devnull * 18. Insertions from the standard input
7 c42a1d3d 2006-02-21 devnull r_rd(int argc, Rune **argv)
12 c42a1d3d 2006-02-21 devnull static int didstdin;
13 c42a1d3d 2006-02-21 devnull static Biobuf bstdin;
16 c42a1d3d 2006-02-21 devnull * print prompt, then read until double newline,
17 c42a1d3d 2006-02-21 devnull * then run the text just read as though it were
18 c42a1d3d 2006-02-21 devnull * a macro body, using the remaining arguments.
20 c42a1d3d 2006-02-21 devnull if(isatty(0)){
21 c42a1d3d 2006-02-21 devnull if(argc > 1)
22 c42a1d3d 2006-02-21 devnull fprint(2, "%S", argv[1]);
24 c42a1d3d 2006-02-21 devnull fprint(2, "%c", 7/*BEL*/);
27 c42a1d3d 2006-02-21 devnull if(!didstdin){
28 c42a1d3d 2006-02-21 devnull Binit(&bstdin, 0, OREAD);
29 c42a1d3d 2006-02-21 devnull didstdin = 1;
31 c42a1d3d 2006-02-21 devnull runefmtstrinit(&fmt);
32 c42a1d3d 2006-02-21 devnull while((s = Brdstr(&bstdin, '\n', 0)) != nil){
33 c42a1d3d 2006-02-21 devnull if(s[0] == '\n'){
37 c42a1d3d 2006-02-21 devnull fmtprint(&fmt, "%s", s);
40 c42a1d3d 2006-02-21 devnull p = runefmtstrflush(&fmt);
41 c42a1d3d 2006-02-21 devnull if(p == nil)
42 c42a1d3d 2006-02-21 devnull warn("out of memory in %Crd", dot);
43 c42a1d3d 2006-02-21 devnull ds(L(".rd"), p);
46 c42a1d3d 2006-02-21 devnull argv[0] = L(".rd");
47 c42a1d3d 2006-02-21 devnull runmacro('.', argc, argv);
48 c42a1d3d 2006-02-21 devnull ds(L(".rd"), nil);
51 c42a1d3d 2006-02-21 devnull /* terminate exactly as if input had ended */
53 c42a1d3d 2006-02-21 devnull r_ex(int argc, Rune **argv)
55 c42a1d3d 2006-02-21 devnull USED(argc);
56 c42a1d3d 2006-02-21 devnull USED(argv);
58 c42a1d3d 2006-02-21 devnull while(popinput())
63 c42a1d3d 2006-02-21 devnull t18init(void)
65 c42a1d3d 2006-02-21 devnull addreq(L("rd"), r_rd, -1);
66 c42a1d3d 2006-02-21 devnull addreq(L("ex"), r_ex, 0);