BSD 4_2 release
[unix-history] / usr / src / usr.bin / refer / refer4.c
CommitLineData
510903cf 1#ifndef lint
0f4556f1 2static char *sccsid = "@(#)refer4.c 4.1 (Berkeley) 5/6/83";
510903cf
BT
3#endif
4
5#include "refer..c"
6#define punctuat(c) (c=='.' || c=='?' || c=='!' || c==',' || c==';' || c==':')
7
8static gate = 0;
9static char buff[BUFSIZ];
10
11output(s)
12char *s;
13{
14 if (gate)
15 fputs(buff,ftemp);
16 else
17 gate = 1;
18 strcpy(buff, s);
19 if (strlen(buff) > BUFSIZ)
20 err("one buff too big (%d)!", BUFSIZ);
21}
22
23append(s)
24char *s;
25{
26 char *p;
27 int lch;
28
29 trimnl(buff);
30 for (p = buff; *p; p++)
31 ;
32 lch = *--p;
33 if (postpunct && punctuat(lch))
34 *p = NULL;
35 else /* pre-punctuation */
36 switch (lch) {
37 case '.':
38 case '?':
39 case '!':
40 case ',':
41 case ';':
42 case ':':
43 *p++ = lch;
44 *p = NULL;
45 }
46 strcat(buff, s);
47 if (postpunct)
48 switch(lch) {
49 case '.':
50 case '?':
51 case '!':
52 case ',':
53 case ';':
54 case ':':
55 for(p = buff; *p; p++)
56 ;
57 if (*--p == '\n')
58 *p = NULL;
59 *p++ = lch;
60 *p++ = '\n';
61 *p = NULL;
62 }
63 if (strlen(buff) > BUFSIZ)
64 err("output buff too long (%d)", BUFSIZ);
65}
66
67flout()
68{
69 if (gate)
70 fputs(buff,ftemp);
71 gate = 0;
72}
73
74char *
75trimnl(ln)
76char *ln;
77{
78 register char *p = ln;
79
80 while (*p)
81 p++;
82 p--;
83 if (*p == '\n')
84 *p = 0;
85 return(ln);
86}