]>
diplodocus.org Git - nmh/blob - docs/historical/mh-nov-1983/cmds/prompter.c
9 int wtuser
; /* waiting for user input */
10 int sigint
; /* sensed an interrupt */
13 struct swit switches
[] = {
14 "erase chr", 2, /* 0 */ /* "2" can become "0",since no ed */
15 "kill chr", 0, /* 1 */
23 char tmpfil
[32], *drft
, name
[NAMESZ
], field
[BUFSIZ
];
27 register int i
, state
;
30 char *arguments
[50], **argp
;
32 int status
, pid
, wpid
, intr
;
35 setbuf(stdout
, _sobuf
);
37 skill
= 0; exitstat
= 0;
38 cp
= r1bindex(argv
[0], '/');
39 if((cp
= m_find(cp
)) != NULL
) {
40 ap
= brkstring(cp
= getcpy(cp
), " ", "\n");
41 ap
= copyip(ap
, arguments
);
48 switch(smatch(++cp
, switches
)) {
49 case -2:ambigsw(cp
, switches
); /* ambiguous */
52 case -1:fprintf(stderr
, "prompter: -%s unknown\n", cp
);
54 case 0: if(!(erasep
= *argp
++)) { /* -erase */
55 missing
: fprintf(stderr
, "prompter: Missing argument for %s switch\n", argp
[-2]);
59 case 1: if(!(killp
= *argp
++)) /* -kill */
63 case 2: help("prompter [switches]",
70 fprintf(stderr
, "prompter: missing skeleton\n");
73 if((in
= fopen(drft
, "r")) == NULL
) {
74 fprintf(stderr
, "Can't open %s\n", drft
);
77 copy(makename("prmt", ".tmp"), copy("/tmp/", tmpfil
));
78 if((out
= fopen(tmpfil
, "w")) == NULL
) {
79 fprintf(stderr
, "Can't create %s\n", tmpfil
);
87 sg
.sg_kill
= killp
? chrcnv(killp
) : skill
;
88 sg
.sg_erase
= erasep
? chrcnv(erasep
) : serase
;
89 /*** stty(0, &sg); ***/
90 ioctl(0, TIOCSETN
, &sg
);
92 printf("Erase Char="); chrdisp(sg
.sg_erase
);
93 printf("; Kill Line="); chrdisp(sg
.sg_kill
);
94 printf(".\n"); fflush(stdout
);
97 for(;;) switch(state
= m_getfld(state
,name
,field
,sizeof field
,in
)) {
102 if(field
[0] != '\n' || field
[1] != 0) {
103 printf("%s:%s", name
, field
);
104 fprintf(out
, "%s:%s", name
, field
);
105 while(state
== FLDPLUS
) {
106 state
=m_getfld(state
,name
,field
,sizeof field
,in
);
108 printf(out
, "%s", field
);
111 printf("%s: ", name
);
116 if(i
== 0 && (field
[0] == '\n' || !field
[0]))
118 fprintf(out
, "%s:", name
);
120 if(field
[0] != ' ' && field
[0] != '\t')
123 } while(i
== 1 && (i
= getln(field
)) >= 0);
135 body
: fputs("--------\n", out
);
136 printf("--------\n");
142 } while(state
== BODY
&&
143 (state
=m_getfld(state
,name
,field
,sizeof field
,in
)));
144 printf("\n--------Enter additional text\n\n");
156 fprintf(stderr
, "Bad format file!\n");
162 printf("--------\n"); fflush(stdout
);
164 out
= fopen(tmpfil
, "r");
166 in
= fopen(drft
, "w"); /* Truncate prior to copy back */
168 if((i
= read(fileno(out
), field
, sizeof field
)) > 0)
169 write(fileno(in
), field
, i
);
170 while(i
== sizeof field
);
184 if(killp
|| erasep
) {
186 sg
.sg_erase
= serase
;
187 /*** stty(0, &sg); ***/
188 ioctl(0, TIOCSETN
, &sg
);
206 /*** fprintf(stderr,"getchar()=\\%o,errno=%d,EINTR=%d\n",c,errno,EINTR);/***/
251 if((c
= *cp
++) != '\\')
254 while(*cp
&& *cp
!= '\n') {
268 printf("<CTRL-%c>", c
+ '@');