BSD 4_2 release
[unix-history] / usr / src / usr.bin / refer / refer4.c
index 42ceb51..a0838ec 100644 (file)
@@ -1,82 +1,86 @@
-# include "refer..c"
-static gate= 0;
-static char buff[LLINE];
-char *trimnl();
-output (s)
-       char *s;
+#ifndef lint
+static char *sccsid = "@(#)refer4.c    4.1 (Berkeley) 5/6/83";
+#endif
+
+#include "refer..c"
+#define punctuat(c) (c=='.' || c=='?' || c=='!' || c==',' || c==';' || c==':')
+
+static gate = 0;
+static char buff[BUFSIZ];
+
+output(s)
+char *s;
 {
 {
-if (gate)
-       fputs(buff,ftemp);
-else
-       gate=1;
-strcpy(buff,s);
-if (strlen(buff)>LLINE)
-       err("one buff too big (%d)!", LLINE);
+       if (gate)
+               fputs(buff,ftemp);
+       else
+               gate = 1;
+       strcpy(buff, s);
+       if (strlen(buff) > BUFSIZ)
+               err("one buff too big (%d)!", BUFSIZ);
 }
 }
+
 append(s)
 append(s)
-       char *s;
+char *s;
 {
 {
-char *p, *r; int lch;
-trimnl(buff);
-for (p=buff; *p; p++)
-       ;
-lch = *--p;
-/*
- *     Extended by Robert Henry, UC Berkeley, 14 May 81
- *     to know about lines ending with 
- *     the set [?!)"-}:], as well as the original [.,]
- *     all of which can occur in normal text.
- *
- *     This prevents the punctuation from being seperated from
- *     the buried reference
- */
-#define CASES \
-       case '.': case ',':\
-       case '?': case '!':\
-       case ')': case '"':\
-       case '-': case '}':\
-       case ':'
+       char *p;
+       int lch;
 
 
-switch (lch)
-       {
-       CASES:          /* rrh */
-               *p=0;
-               r="\\*(<";
-               while (*r) *p++= *r++;
-               *p++ = lch;
-               *p=0;
-       }
-strcat(buff,s);
-switch(lch)
-       {
-       CASES:          /* rrh */
-               for(p=buff; *p; p++)
-                       ;
-               if (*--p=='\n')*p=0;
-               r = "\\*(>";
-               while (*r) *p++ = *r++;
-               *p++ = lch;
-               *p++ = '\n';
-               *p=0;
-       }
-if (strlen(buff)>LLINE)
-       err("output buff too long (%d)", LLINE);
+       trimnl(buff);
+       for (p = buff; *p; p++)
+               ;
+       lch = *--p;
+       if (postpunct && punctuat(lch))
+               *p = NULL;
+       else /* pre-punctuation */
+               switch (lch) {
+               case '.': 
+               case '?':
+               case '!':
+               case ',':
+               case ';':
+               case ':':
+                       *p++ = lch;
+                       *p = NULL;
+               }
+       strcat(buff, s);
+       if (postpunct)
+               switch(lch) {
+               case '.': 
+               case '?':
+               case '!':
+               case ',':
+               case ';':
+               case ':':
+                       for(p = buff; *p; p++)
+                               ;
+                       if (*--p == '\n')
+                               *p = NULL;
+                       *p++ = lch;
+                       *p++ = '\n';
+                       *p = NULL;
+               }
+       if (strlen(buff) > BUFSIZ)
+               err("output buff too long (%d)", BUFSIZ);
 }
 
 flout()
 {
 }
 
 flout()
 {
-if (gate)
-       fputs(buff,ftemp);
-gate=0;
+       if (gate)
+               fputs(buff,ftemp);
+       gate = 0;
 }
 
 char *
 trimnl(ln)
 }
 
 char *
 trimnl(ln)
-       char *ln;
+char *ln;
 {
 {
-register char *p = ln;
-while (*p) p++;
-p--;
-if (*p == '\n') *p=0;
-return(ln);
+       register char *p = ln;
+
+       while (*p)
+               p++;
+       p--;
+       if (*p == '\n')
+               *p = 0;
+       return(ln);
 }
 }