home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume1 / rn / patch04 < prev    next >
Encoding:
Text File  |  1986-11-30  |  17.6 KB  |  629 lines

  1. Patch #: 4
  2. Priority: ENHANCEMENT
  3. Subject: there should be a way to suppress quoted material and signatures
  4. >From: lwall@sdcrdcf.UUCP (Larry Wall)
  5.  
  6. Description:
  7.     There have been numerous requests for a way to suppress quoted
  8.     material and oversized signatures, especially at low baud rates.
  9.     I resisted implementing any of the proposed solutions in the
  10.     released version because I didn't feel they were general enough.
  11.     It suddenly occured to me, however, that we already had regular
  12.     expressions that supported alternatives, and that by defining
  13.     a couple more environment variables (which can be set via a
  14.     baud-rate-controlled -E switch) we could do what we wanted
  15.     without hardwiring the current net conventions into rn.
  16.  
  17.     The following are the new "environment" variables:
  18.  
  19.     HIDELINE -- contains, if defined, a pattern of lines to hide.
  20.     Can be used to suppress lines beginning with ">", for instance.
  21.  
  22.     PAGESTOP -- contains, if defined, a pattern of lines to treat as
  23.     form feeds.  This can be used to do page breaks between articles
  24.     in a digest, and to do a page break before the signature, which
  25.     can then be recognized (from the "--") and 'n'ed.
  26.  
  27. Fix:    From rn, say "| patch -d DIR", where DIR is your rn source directory.
  28.     Outside of rn, say "cd DIR; patch <thisarticle".  If you don't have
  29.     the patch program, apply the following by hand, or get patch.
  30.  
  31.     Warning: this patch is not reversed.  If the patch program says
  32.     it is, then this patch has already been applied, and you should
  33.     not apply it again.
  34.  
  35.     If patch indicates that patchlevel is the wrong version, you may need
  36.     to apply one or more previous patches, or the patch may already
  37.     have been applied.  See the patchlevel file to find out what has or
  38.     has not been applied.  In any event, don't continue with the patch.
  39.  
  40. Index: patchlevel
  41. Prereq: 3
  42. 1c1
  43. < Patch #: 3
  44. ---
  45. > Patch #: 4
  46.  
  47. Index: art.c
  48. Prereq: 4.3.1.2
  49. *** art.c.old    Mon May 13 09:32:42 1985
  50. --- art.c    Mon May 13 09:32:48 1985
  51. ***************
  52. *** 1,4
  53. ! /* $Header: art.c,v 4.3.1.2 85/05/10 13:46:07 lwall Exp $
  54.    *
  55.    * $Log:    art.c,v $
  56.    * Revision 4.3.1.2  85/05/10  13:46:07  lwall
  57.  
  58. --- 1,4 -----
  59. ! /* $Header: art.c,v 4.3.1.3 85/05/13 09:29:55 lwall Exp $
  60.    *
  61.    * $Log:    art.c,v $
  62.    * Revision 4.3.1.3  85/05/13  09:29:55  lwall
  63. ***************
  64. *** 1,6
  65.   /* $Header: art.c,v 4.3.1.2 85/05/10 13:46:07 lwall Exp $
  66.    *
  67.    * $Log:    art.c,v $
  68.    * Revision 4.3.1.2  85/05/10  13:46:07  lwall
  69.    * Fixed header reparse bug on backpage.
  70.    * 
  71.  
  72. --- 1,9 -----
  73.   /* $Header: art.c,v 4.3.1.3 85/05/13 09:29:55 lwall Exp $
  74.    *
  75.    * $Log:    art.c,v $
  76. +  * Revision 4.3.1.3  85/05/13  09:29:55  lwall
  77. +  * Added CUSTOMLINES option.
  78. +  * 
  79.    * Revision 4.3.1.2  85/05/10  13:46:07  lwall
  80.    * Fixed header reparse bug on backpage.
  81.    * 
  82. ***************
  83. *** 61,66
  84.   
  85.   bool firstpage;            /* is this the 1st page of article? */
  86.   
  87.   void
  88.   art_init()
  89.   {
  90.  
  91. --- 64,71 -----
  92.   
  93.   bool firstpage;            /* is this the 1st page of article? */
  94.   
  95. + char art_buf[LBUFLEN];        /* place for article lines */
  96.   void
  97.   art_init()
  98.   {
  99. ***************
  100. *** 72,78
  101.   {
  102.       register char *s;
  103.       ART_POS artsize;            /* size in bytes of article */
  104. -     char art_buf[LBUFLEN];        /* place for article lines */
  105.       bool hide_this_line = FALSE;    /* hidden header line? */
  106.       ART_LINE linenum;    /* line # on page, 1 origin */
  107.   #ifdef ULSMARTS
  108.  
  109. --- 77,82 -----
  110.   {
  111.       register char *s;
  112.       ART_POS artsize;            /* size in bytes of article */
  113.       bool hide_this_line = FALSE;    /* hidden header line? */
  114.       ART_LINE linenum;    /* line # on page, 1 origin */
  115.   #ifdef ULSMARTS
  116. ***************
  117. *** 199,204
  118.           hide_this_line = TRUE;    /* and do not print either */
  119.           notesfiles = FALSE;
  120.           }
  121.           if (in_header && htype[in_header].ht_flags & HT_MAGIC) {
  122.           if (in_header == NGS_LINE) {
  123.               hide_this_line = (index(art_buf,',') == Nullch && do_hiding);
  124.  
  125. --- 203,213 -----
  126.           hide_this_line = TRUE;    /* and do not print either */
  127.           notesfiles = FALSE;
  128.           }
  129. + #ifdef CUSTOMLINES
  130. +         if (hideline && bufptr == art_buf &&
  131. +           execute(&hide_compex,art_buf) )
  132. +         hide_this_line = TRUE;
  133. + #endif
  134.           if (in_header && htype[in_header].ht_flags & HT_MAGIC) {
  135.           if (in_header == NGS_LINE) {
  136.               hide_this_line = (index(art_buf,',') == Nullch);
  137. ***************
  138. *** 201,207
  139.           }
  140.           if (in_header && htype[in_header].ht_flags & HT_MAGIC) {
  141.           if (in_header == NGS_LINE) {
  142. !             hide_this_line = (index(art_buf,',') == Nullch && do_hiding);
  143.           }
  144.           else if (in_header == EXPIR_LINE) {
  145.               if (!(htype[EXPIR_LINE].ht_flags & HT_HIDE))
  146.  
  147. --- 210,216 -----
  148.   #endif
  149.           if (in_header && htype[in_header].ht_flags & HT_MAGIC) {
  150.           if (in_header == NGS_LINE) {
  151. !             hide_this_line = (index(art_buf,',') == Nullch);
  152.           }
  153.           else if (in_header == EXPIR_LINE) {
  154.               if (!(htype[EXPIR_LINE].ht_flags & HT_HIDE))
  155. ***************
  156. *** 205,211
  157.           }
  158.           else if (in_header == EXPIR_LINE) {
  159.               if (!(htype[EXPIR_LINE].ht_flags & HT_HIDE))
  160. !             hide_this_line = (strlen(art_buf) < 10 && do_hiding);
  161.           }
  162.           }
  163.           if (in_header == SUBJ_LINE &&
  164.  
  165. --- 214,220 -----
  166.           }
  167.           else if (in_header == EXPIR_LINE) {
  168.               if (!(htype[EXPIR_LINE].ht_flags & HT_HIDE))
  169. !             hide_this_line = (strlen(art_buf) < 10);
  170.           }
  171.           }
  172.           if (in_header == SUBJ_LINE &&
  173. ***************
  174. *** 243,249
  175.           underprint(s);    /* print subject underlined */
  176.           putchar('\n') FLUSH;    /* and finish the line */
  177.           }
  178. !         else if (hide_this_line) {    /* do not print line? */
  179.           linenum--;        /* compensate for linenum++ */
  180.           if (!in_header)
  181.               hide_this_line = FALSE;
  182.  
  183. --- 252,259 -----
  184.           underprint(s);    /* print subject underlined */
  185.           putchar('\n') FLUSH;    /* and finish the line */
  186.           }
  187. !         else if (hide_this_line && do_hiding) {
  188. !                     /* do not print line? */
  189.           linenum--;        /* compensate for linenum++ */
  190.           if (!in_header)
  191.               hide_this_line = FALSE;
  192. ***************
  193. *** 277,282
  194.   #endif
  195.           maybe_eol();    /* PWP */
  196.   #endif CLEAREOL
  197.           for (outpos = 0; outpos < COLS; ) {
  198.                       /* while line has room */
  199.               if (*bufptr >= ' ') {    /* normal char? */
  200.  
  201. --- 287,297 -----
  202.   #endif
  203.           maybe_eol();    /* PWP */
  204.   #endif CLEAREOL
  205. + #ifdef CUSTOMLINES
  206. +         if (pagestop && bufptr == art_buf && 
  207. +           execute(&page_compex,art_buf) )
  208. +             linenum = 32700;
  209. + #endif
  210.           for (outpos = 0; outpos < COLS; ) {
  211.                       /* while line has room */
  212.               if (*bufptr >= ' ') {    /* normal char? */
  213. ***************
  214. *** 559,565
  215.       case Ctl('d'):    /* half page */
  216.       special = TRUE;
  217.       slines = LINES / 2 + 1;
  218. !     if (marking && *blinebeg != '\f') {
  219.           up_line();
  220.           highlight = --artline;
  221.           restart = blinebeg;
  222.  
  223. --- 574,585 -----
  224.       case Ctl('d'):    /* half page */
  225.       special = TRUE;
  226.       slines = LINES / 2 + 1;
  227. !     if (marking && *blinebeg != '\f'
  228. ! #ifdef CUSTOMLINES
  229. !       && (!pagestop || blinebeg != art_buf ||
  230. !           !execute(&page_compex,blinebeg))
  231. ! #endif
  232. !       ) {
  233.           up_line();
  234.           highlight = --artline;
  235.           restart = blinebeg;
  236. ***************
  237. *** 803,809
  238.           clear();    /* else clear screen */
  239.   
  240.   #endif CLEAREOL
  241. !         if (*blinebeg != '\f') {
  242.           restart = blinebeg;
  243.           artline--;     /* restart this line */
  244.           artpos = alinebeg;
  245.  
  246. --- 823,834 -----
  247.           clear();    /* else clear screen */
  248.   
  249.   #endif CLEAREOL
  250. !         if (*blinebeg != '\f'
  251. ! #ifdef CUSTOMLINES
  252. !           && (!pagestop || blinebeg != art_buf ||
  253. !               !execute(&page_compex,blinebeg))
  254. ! #endif
  255. !           ) {
  256.           restart = blinebeg;
  257.           artline--;     /* restart this line */
  258.           artpos = alinebeg;
  259. ***************
  260. *** 814,820
  261.               /* and remember top line of screen */
  262.               /*  (line # within article file) */
  263.       }
  264. !     else if (marking && *blinebeg != '\f') {
  265.                   /* are we marking repeats? */
  266.           up_line();        /* go up one line */
  267.           highlight = --artline;/* and get ready to highlight */
  268.  
  269. --- 839,850 -----
  270.               /* and remember top line of screen */
  271.               /*  (line # within article file) */
  272.       }
  273. !     else if (marking && *blinebeg != '\f'
  274. ! #ifdef CUSTOMLINES
  275. !       && (!pagestop || blinebeg != art_buf ||
  276. !           !execute(&page_compex,blinebeg))
  277. ! #endif
  278. !       ) {
  279.                   /* are we marking repeats? */
  280.           up_line();        /* go up one line */
  281.           highlight = --artline;/* and get ready to highlight */
  282.  
  283. Index: artstate.h
  284. Prereq: 4.3
  285. *** artstate.h.old    Mon May 13 09:31:51 1985
  286. --- artstate.h    Mon May 13 09:31:52 1985
  287. ***************
  288. *** 1,4
  289. ! /* $Header: artstate.h,v 4.3 85/05/01 11:35:59 lwall Exp $
  290.    *
  291.    * $Log:    artstate.h,v $
  292.    * Revision 4.3  85/05/01  11:35:59  lwall
  293.  
  294. --- 1,4 -----
  295. ! /* $Header: artstate.h,v 4.3.1.2 85/05/13 09:30:30 lwall Exp $
  296.    *
  297.    * $Log:    artstate.h,v $
  298.    * Revision 4.3.1.2  85/05/13  09:30:30  lwall
  299. ***************
  300. *** 1,6
  301.   /* $Header: artstate.h,v 4.3 85/05/01 11:35:59 lwall Exp $
  302.    *
  303.    * $Log:    artstate.h,v $
  304.    * Revision 4.3  85/05/01  11:35:59  lwall
  305.    * Baseline for release with 4.3bsd.
  306.    * 
  307.  
  308. --- 1,12 -----
  309.   /* $Header: artstate.h,v 4.3.1.2 85/05/13 09:30:30 lwall Exp $
  310.    *
  311.    * $Log:    artstate.h,v $
  312. +  * Revision 4.3.1.2  85/05/13  09:30:30  lwall
  313. +  * Added CUSTOMLINES option.
  314. +  * 
  315. +  * Revision 4.3.1.1  85/05/10  11:31:32  lwall
  316. +  * Branch for patches.
  317. +  * 
  318.    * Revision 4.3  85/05/01  11:35:59  lwall
  319.    * Baseline for release with 4.3bsd.
  320.    * 
  321. ***************
  322. *** 19,21
  323.   EXT char *prompt;            /* pointer to current prompt */
  324.   
  325.   EXT char *firstline INIT(Nullch);            /* special first line? */
  326.  
  327. --- 25,33 -----
  328.   EXT char *prompt;            /* pointer to current prompt */
  329.   
  330.   EXT char *firstline INIT(Nullch);            /* special first line? */
  331. + #ifdef CUSTOMLINES
  332. + EXT char *hideline INIT(Nullch);        /* custom line hiding? */
  333. + EXT char *pagestop INIT(Nullch);        /* custom page terminator? */
  334. + EXT COMPEX hide_compex;
  335. + EXT COMPEX page_compex;
  336. + #endif
  337.  
  338. Index: common.h
  339. Prereq: 4.3
  340. *** common.h.old    Mon May 13 09:31:29 1985
  341. --- common.h    Mon May 13 09:31:33 1985
  342. ***************
  343. *** 1,4
  344. ! /* $Header: common.h,v 4.3 85/05/01 11:37:11 lwall Exp $
  345.    * 
  346.    * $Log:    common.h,v $
  347.    * Revision 4.3  85/05/01  11:37:11  lwall
  348.  
  349. --- 1,4 -----
  350. ! /* $Header: common.h,v 4.3.1.2 85/05/13 09:30:39 lwall Exp $
  351.    * 
  352.    * $Log:    common.h,v $
  353.    * Revision 4.3.1.2  85/05/13  09:30:39  lwall
  354. ***************
  355. *** 1,6
  356.   /* $Header: common.h,v 4.3 85/05/01 11:37:11 lwall Exp $
  357.    * 
  358.    * $Log:    common.h,v $
  359.    * Revision 4.3  85/05/01  11:37:11  lwall
  360.    * Baseline for release with 4.3bsd.
  361.    * 
  362.  
  363. --- 1,12 -----
  364.   /* $Header: common.h,v 4.3.1.2 85/05/13 09:30:39 lwall Exp $
  365.    * 
  366.    * $Log:    common.h,v $
  367. +  * Revision 4.3.1.2  85/05/13  09:30:39  lwall
  368. +  * Added CUSTOMLINES option.
  369. +  * 
  370. +  * Revision 4.3.1.1  85/05/10  11:32:04  lwall
  371. +  * Branch for patches.
  372. +  * 
  373.    * Revision 4.3  85/05/01  11:37:11  lwall
  374.    * Baseline for release with 4.3bsd.
  375.    * 
  376. ***************
  377. *** 215,220
  378.   /* In general, earlier ones are easier to get along without */
  379.   /* Pdp11's without split I and D may have to undefine them all */
  380.   #define DEBUGGING    /* include debugging code */
  381.   #define PUSHBACK    /* macros and keymaps using pushback buffer */
  382.   #define SPEEDOVERMEM    /* use more memory to run faster */
  383.   #define WORDERASE    /* enable ^W to erase a word */
  384.  
  385. --- 221,227 -----
  386.   /* In general, earlier ones are easier to get along without */
  387.   /* Pdp11's without split I and D may have to undefine them all */
  388.   #define DEBUGGING    /* include debugging code */
  389. + #define CUSTOMLINES    /* include code for HIDELINE and PAGESTOP */
  390.   #define PUSHBACK    /* macros and keymaps using pushback buffer */
  391.   #define SPEEDOVERMEM    /* use more memory to run faster */
  392.   #define WORDERASE    /* enable ^W to erase a word */
  393.  
  394. Index: ng.c
  395. Prereq: 4.3
  396. *** ng.c.old    Mon May 13 09:32:07 1985
  397. --- ng.c    Mon May 13 09:32:13 1985
  398. ***************
  399. *** 1,4
  400. ! /* $Header: ng.c,v 4.3 85/05/01 11:43:43 lwall Exp $
  401.    *
  402.    * $Log:    ng.c,v $
  403.    * Revision 4.3  85/05/01  11:43:43  lwall
  404.  
  405. --- 1,4 -----
  406. ! /* $Header: ng.c,v 4.3.1.2 85/05/13 09:29:28 lwall Exp $
  407.    *
  408.    * $Log:    ng.c,v $
  409.    * Revision 4.3.1.2  85/05/13  09:29:28  lwall
  410. ***************
  411. *** 1,6
  412.   /* $Header: ng.c,v 4.3 85/05/01 11:43:43 lwall Exp $
  413.    *
  414.    * $Log:    ng.c,v $
  415.    * Revision 4.3  85/05/01  11:43:43  lwall
  416.    * Baseline for release with 4.3bsd.
  417.    * 
  418.  
  419. --- 1,12 -----
  420.   /* $Header: ng.c,v 4.3.1.2 85/05/13 09:29:28 lwall Exp $
  421.    *
  422.    * $Log:    ng.c,v $
  423. +  * Revision 4.3.1.2  85/05/13  09:29:28  lwall
  424. +  * Added CUSTOMLINES option.
  425. +  * 
  426. +  * Revision 4.3.1.1  85/05/10  11:36:00  lwall
  427. +  * Branch for patches.
  428. +  * 
  429.    * Revision 4.3  85/05/01  11:43:43  lwall
  430.    * Baseline for release with 4.3bsd.
  431.    * 
  432. ***************
  433. *** 29,34
  434.   #include "backpage.h"
  435.   #include "rcln.h"
  436.   #include "last.h"
  437.   #include "INTERN.h"
  438.   #include "ng.h"
  439.   #include "artstate.h"            /* somebody has to do it */
  440.  
  441. --- 35,41 -----
  442.   #include "backpage.h"
  443.   #include "rcln.h"
  444.   #include "last.h"
  445. + #include "search.h"
  446.   #include "INTERN.h"
  447.   #include "ng.h"
  448.   #include "artstate.h"            /* somebody has to do it */
  449. ***************
  450. *** 51,56
  451.   #ifdef KILLFILES
  452.       open_kfile(KF_GLOBAL);
  453.   #endif
  454.   }
  455.   
  456.   /* do newsgroup on line ng with name ngname */
  457.  
  458. --- 58,67 -----
  459.   #ifdef KILLFILES
  460.       open_kfile(KF_GLOBAL);
  461.   #endif
  462. + #ifdef CUSTOMLINES
  463. +     init_compex(&hide_compex);
  464. +     init_compex(&page_compex);
  465. + #endif
  466.   }
  467.   
  468.   /* do newsgroup on line ng with name ngname */
  469. ***************
  470. *** 164,173
  471.   
  472.       writelast();
  473.   
  474. -     /* do they want a special top line? */
  475. -     firstline = getval("FIRSTLINE",Nullch);
  476.       /* see if there are any special searches to do */
  477.   
  478.   #ifdef KILLFILES
  479.  
  480. --- 175,180 -----
  481.   
  482.       writelast();
  483.   
  484.       /* see if there are any special searches to do */
  485.   
  486.   #ifdef KILLFILES
  487. ***************
  488. *** 182,187
  489.   #endif
  490.   #endif
  491.       
  492.       /* now read each unread article */
  493.   
  494.       rc_changed = doing_ng = TRUE;    /* enter the twilight zone */
  495.  
  496. --- 189,207 -----
  497.   #endif
  498.   #endif
  499.       
  500. +     /* do they want a special top line? */
  501. +     firstline = getval("FIRSTLINE",Nullch);
  502. +     /* custom line suppression, custom page ending */
  503. + #ifdef CUSTOMLINES
  504. +     if (hideline = getval("HIDELINE",Nullch))
  505. +     compile(&hide_compex,hideline,TRUE,TRUE);
  506. +     if (pagestop = getval("PAGESTOP",Nullch))
  507. +     compile(&page_compex,pagestop,TRUE,TRUE);
  508. + #endif
  509.       /* now read each unread article */
  510.   
  511.       rc_changed = doing_ng = TRUE;    /* enter the twilight zone */
  512.  
  513. Index: rn.1
  514. Prereq: 4.3
  515. *** rn.1.old    Mon May 13 09:33:24 1985
  516. --- rn.1    Mon May 13 09:33:34 1985
  517. ***************
  518. *** 1,4
  519. ! ''' $Header: rn.1,v 4.3 85/05/01 11:48:26 lwall Exp $
  520.   ''' 
  521.   ''' $Log:    rn.1,v $
  522.   ''' Revision 4.3  85/05/01  11:48:26  lwall
  523.  
  524. --- 1,4 -----
  525. ! ''' $Header: rn.1,v 4.3.1.2 85/05/13 09:27:53 lwall Exp $
  526.   ''' 
  527.   ''' $Log:    rn.1,v $
  528.   ''' Revision 4.3.1.2  85/05/13  09:27:53  lwall
  529. ***************
  530. *** 1,6
  531.   ''' $Header: rn.1,v 4.3 85/05/01 11:48:26 lwall Exp $
  532.   ''' 
  533.   ''' $Log:    rn.1,v $
  534.   ''' Revision 4.3  85/05/01  11:48:26  lwall
  535.   ''' Baseline for release with 4.3bsd.
  536.   ''' 
  537.  
  538. --- 1,12 -----
  539.   ''' $Header: rn.1,v 4.3.1.2 85/05/13 09:27:53 lwall Exp $
  540.   ''' 
  541.   ''' $Log:    rn.1,v $
  542. + ''' Revision 4.3.1.2  85/05/13  09:27:53  lwall
  543. + ''' Added CUSTOMLINES option.
  544. + ''' 
  545. + ''' Revision 4.3.1.1  85/05/10  11:38:22  lwall
  546. + ''' Branch for patches.
  547. + ''' 
  548.   ''' Revision 4.3  85/05/01  11:48:26  lwall
  549.   ''' Baseline for release with 4.3bsd.
  550.   ''' 
  551. ***************
  552. *** 1271,1276
  553.   Warning: this may go away.
  554.   .Sp
  555.   Default: Article %a %(%U%M!=^00$?(%U more%(%M!=^0$? + %M Marked to return)\e) )in %C:, more or less.
  556.   .Ip HOME 8
  557.   Your home directory.
  558.   Affects ~ interpretation, and the location of your
  559.  
  560. --- 1277,1299 -----
  561.   Warning: this may go away.
  562.   .Sp
  563.   Default: Article %a %(%U%M!=^00$?(%U more%(%M!=^0$? + %M Marked to return)\e) )in %C:, more or less.
  564. + .Ip HIDELINE 8
  565. + If defined, contains a regular expression which matches article lines to
  566. + be hidden, in order, for instance, to suppress quoted material.
  567. + A recommended string for this purpose is \*(L"^>...\*(R", which \fIdoesn't\fR
  568. + hide lines with only \*(L'>\*(R', to give some indication that quoted
  569. + material is being skipped.
  570. + If you want to hide more than one pattern, you can use \*(L"\|\*(R" to
  571. + separate the alternatives.
  572. + You can view the hidden lines by restarting the article with the \*(L'v\*(R'
  573. + command.
  574. + .Sp
  575. + There is some overhead involved in matching each line of the article against
  576. + a regular expression.
  577. + You might wish to use a baud-rate modifier to enable this feature only at
  578. + low baud rates.
  579. + .Sp
  580. + Default: undefined
  581.   .Ip HOME 8
  582.   Your home directory.
  583.   Affects ~ interpretation, and the location of your
  584. ***************
  585. *** 1401,1406
  586.   May be interpolated using \*(L"%o\*(R".
  587.   .Sp
  588.   Default: whatever your news administrator compiled in.
  589.   .Ip "PIPESAVER (%)" 8
  590.   The shell command to execute in order to accomplish a save to a pipe
  591.   (\*(L"s\ |\ command\*(R" or \*(L"w\ |\ command\*(R").
  592.  
  593. --- 1424,1449 -----
  594.   May be interpolated using \*(L"%o\*(R".
  595.   .Sp
  596.   Default: whatever your news administrator compiled in.
  597. + .Ip PAGESTOP 8
  598. + If defined, contains a regular expression which matches article lines to
  599. + be treated as form-feeds.
  600. + There are at least two things you might want to do with this.
  601. + To cause page breaks between articles in a digest, you might define it
  602. + as \*(L"^--------\*(R".
  603. + To force a page break before a signature, you could define it
  604. + as \*(L"^-- $\*(R".
  605. + (Then, when you see \*(L"--\*(R" at the bottom of the page, you can skip
  606. + the signature if you so desire by typing \*(L'n\*(R' instead of space.)
  607. + To do both, you could use \*(L"^--\*(R".
  608. + If you want to break on more than one pattern, you can use \*(L"\|\*(R" to
  609. + separate the alternatives.
  610. + .Sp
  611. + There is some overhead involved in matching each line of the article against
  612. + a regular expression.
  613. + You might wish to use a baud-rate modifier to enable this feature only at
  614. + low baud rates.
  615. + .Sp
  616. + Default: undefined
  617.   .Ip "PIPESAVER (%)" 8
  618.   The shell command to execute in order to accomplish a save to a pipe
  619.   (\*(L"s\ |\ command\*(R" or \*(L"w\ |\ command\*(R").
  620.  
  621.  
  622.