Internet-Draft J. Postel 24-June-91 RFC "nroff macros" Status This odd Internet Draft is posted for the convenience of authors who wish to prepare documents in the style of RFC's. This style is compatable with Internet Drafts with the addition of a few guidelines listed in the file IETF/1id-guidelines in all the IETF directories. Generally, we use the very simplest nroff features. We use the "ms" macros. So, "nroff -ms input-file > output-file". However, we could not get nroff to do the right thing about putting a form feed after the last visible line on a page and no extra line feeds before the first visible line of the next page. We want: last visible line on page i ^L first visible line on page i+1 So, we invented some hacks to fix this including a "sed" script called "fix.sh" and a "c" program we called "pg" (pg is called from fix). So the command to process the file becomes: nroff -ms input-file | fix.sh > output-file Now as to the nroff features we actually use, I'll append a sample memo, prepared in RFC style. The sed script fix.sh is: sed -e 's/FORMFEED\[Page/ \[Page/' $* | pg -n5 The pg program is: ~Begining of pg program~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /* * $Header$ * * Remove N lines following any line that contains a form feed (^L). * (Why can't this be done with awk or sed?) * * OPTION: * -n# Number of lines to delete following each ^L (0 default). * $Log$ */ #include #define FORM_FEED '\f' #define OPTION "n:N:" /* for getopt() */ extern char *optarg; extern int optind; main(argc, argv) int argc; char *argv[]; { int c, /* next input char */ nlines = 0; /* lines to delete after ^L */ void print_and_delete(); /* print line starting with ^L, then delete N lines */ /*********************** Process option (-nlines) ***********************/ while ((c = getopt(argc, argv, OPTION)) != EOF) switch(c) { case 'n' : case 'N' : nlines = atoi(optarg); break; } /************************* READ AND PROCESS CHARS **********************/ while ((c = getchar()) != EOF) if (c == FORM_FEED) print_and_delete(nlines); /* remove N lines after this one */ else putchar(c); /* we write the form feed */ exit(0); } /* * Print rest of line, then delete next N lines. */ void print_and_delete(n) int n; /* nbr of lines to delete */ { int c, /* next input char */ cntr = 0; /* count of deleted lines */ while ((c = getchar()) != '\n') /* finish current line */ putchar(c); putchar('\n'); /* write the last CR */ putchar(FORM_FEED); for ( ; cntr < n; cntr++) while ((c = getchar()) != '\n') if (c == EOF) exit(0); /* exit on EOF */ putchar(c); /* write that last CR */ } ~End of pg program~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Hope this helps, - --jon. ~Begining of sample nroff RFC~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .pl 10.0i .po 0 .ll 7.2i .lt 7.2i .nr LL 7.2i .nr LT 7.2i .ds LF Drissel .ds RF FORMFEED[Page %] .ds CF .ds LH RFC DRAFT .ds RH February 1987 .ds CH .hy 0 .ad l Network Working Group W. Drissel Request for Comments: DRAFT CyberScribe Associates February 1987 .sp 2 .ce Final Report of ANSI Committee LY-2299-BS .sp 2 .fi .ne 4 Status of this Memo .sp .in 3 This RFC is being distributed to members of the Internet community in order to solicit their reactions to the proposals contained in it. While the issues discussed may not be directly relevant to the research problems of the Internet, they may be interesting to a number of researchers and implementers. Distribution of this memo is unlimited. .sp .in 0 .ne 4 Proposed ANSI Standard Mendacity Scale .sp .nf Class I Lies Class II Damn Lies Class III Statistics Class IV Damn Statistics Class V Benchmarks Class VI Delivery Promises Class VII Campaign Promises .fi .sp .in 0 .ne 4 Discussion .sp .in 3 The committee felt it desirable to include the following explanatory notes: (1) Class IV lies are distinguished from Class III lies by the willful abuse statistical practice. For example, "Brand A lasts up to twice as long as the average of the five leading brands". This example compares the one best sample of Brand A with an average -- trying to give the impression of the superiority when a comparison of the average of Brand A and the rest may have demonstrated an inferiority. A second example is "Brand A lasts longer -- 30.3 months compared with 30.2 months for the competition". This example ignores the principle of statistical significance. (2) Class VII lies are distinguished from Class VI lies by the fact that nearly every delivery promise is EVENTUALLY followed by delivery. .sp .in 0 .ne 4 Author's Note: .sp .in 3 I've embellished the original scale but have, unfortunately, forgotten its source. If anyone can find the original reference, please send it to me so the original author can be suitably remembered in the standard. .sp .in 0 Security Considerations .sp .in 3 Security considerations ane not discussed in this memo. .in 0 .ne 5 Author's Address: .sp .in 3 .nf William E. Drissel CyberScribe Associates Grand Prairie, Texas .fi .sp .in 0 Editor's Note: .sp .in 3 This report is reprinted from IEEE Computer, February 1987. ~End of sample nroff RFC~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ------- End of Forwarded Message