Generated
[privoxy.git] / doc / webserver / developer-manual / documentation.html
1 <HTML
2 ><HEAD
3 ><TITLE
4 >Documentation Guidelines</TITLE
5 ><META
6 NAME="GENERATOR"
7 CONTENT="Modular DocBook HTML Stylesheet Version 1.60"><LINK
8 REL="HOME"
9 TITLE="Privoxy Developer Manual"
10 HREF="index.html"><LINK
11 REL="PREVIOUS"
12 TITLE="The CVS Repository"
13 HREF="cvs.html"><LINK
14 REL="NEXT"
15 TITLE="Coding Guidelines"
16 HREF="coding.html"><LINK
17 REL="STYLESHEET"
18 TYPE="text/css"
19 HREF="../p_doc.css"></HEAD
20 ><BODY
21 CLASS="SECT1"
22 BGCOLOR="#EEEEEE"
23 TEXT="#000000"
24 LINK="#0000FF"
25 VLINK="#840084"
26 ALINK="#0000FF"
27 ><DIV
28 CLASS="NAVHEADER"
29 ><TABLE
30 WIDTH="100%"
31 BORDER="0"
32 CELLPADDING="0"
33 CELLSPACING="0"
34 ><TR
35 ><TH
36 COLSPAN="3"
37 ALIGN="center"
38 >Privoxy Developer Manual</TH
39 ></TR
40 ><TR
41 ><TD
42 WIDTH="10%"
43 ALIGN="left"
44 VALIGN="bottom"
45 ><A
46 HREF="cvs.html"
47 >Prev</A
48 ></TD
49 ><TD
50 WIDTH="80%"
51 ALIGN="center"
52 VALIGN="bottom"
53 ></TD
54 ><TD
55 WIDTH="10%"
56 ALIGN="right"
57 VALIGN="bottom"
58 ><A
59 HREF="coding.html"
60 >Next</A
61 ></TD
62 ></TR
63 ></TABLE
64 ><HR
65 ALIGN="LEFT"
66 WIDTH="100%"></DIV
67 ><DIV
68 CLASS="SECT1"
69 ><H1
70 CLASS="SECT1"
71 ><A
72 NAME="DOCUMENTATION"
73 >3. Documentation Guidelines</A
74 ></H1
75 ><P
76 >    All formal documents are maintained in Docbook SGML and located in the
77     <TT
78 CLASS="COMPUTEROUTPUT"
79 >doc/source/*</TT
80 > directory. You will need
81     <A
82 HREF="http://www.docbook.org"
83 TARGET="_top"
84 >Docbook</A
85 >, the Docbook 
86     DTD's and the Docbook modular stylesheets (or comparable alternatives),
87     and either <SPAN
88 CLASS="APPLICATION"
89 >jade</SPAN
90 > or
91     <SPAN
92 CLASS="APPLICATION"
93 >openjade</SPAN
94 > (recommended) installed in order to
95     build docs from source. Currently there is <A
96 HREF="../user-manual/index.html"
97 TARGET="_top"
98 ><I
99 CLASS="CITETITLE"
100 >user-manual</I
101 ></A
102 >,
103     <A
104 HREF="../faq/index.html"
105 TARGET="_top"
106 ><I
107 CLASS="CITETITLE"
108 >FAQ</I
109 ></A
110 >, and, of
111     course this, the <I
112 CLASS="CITETITLE"
113 >developer-manual</I
114 > in this format.
115     The <I
116 CLASS="CITETITLE"
117 >README</I
118 >, <I
119 CLASS="CITETITLE"
120 >AUTHORS</I
121 >
122     <I
123 CLASS="CITETITLE"
124 >privoxy.1</I
125 > (man page), and
126     <I
127 CLASS="CITETITLE"
128 >config</I
129 > files are also now maintained as Docbook
130     SGML. These files, when built, in the top-level source directory are
131     generated files! Also, the <SPAN
132 CLASS="APPLICATION"
133 >Privoxy</SPAN
134 > <TT
135 CLASS="FILENAME"
136 >index.html</TT
137 > (and a 
138     variation on this file, <TT
139 CLASS="FILENAME"
140 >privoxy-index.html</TT
141 >, 
142     meant for inclusion with doc packages), are maintained as SGML as well.
143     <I
144 CLASS="EMPHASIS"
145 >DO NOT edit these directly</I
146 >. Edit the SGML source, or
147     contact someone involved in the documentation (at present Stefan and
148     Hal).
149     </P
150 ><P
151 >     <TT
152 CLASS="FILENAME"
153 >config</TT
154 > requires some special handling. The reason it
155      is maintained this way is so that the extensive comments in the file
156      mirror those in <I
157 CLASS="CITETITLE"
158 >user-manual</I
159 >. But the conversion 
160      process requires going from SGML to HTML to text to special formatting 
161      required for the embedded comments. Some of this does not survive so
162      well. Especially some of the examples that are longer than 80 characters.
163      The build process for this file outputs to <TT
164 CLASS="FILENAME"
165 >config.new</TT
166 >, 
167      which should be reviewed for errors and mis-formatting. Once satisfied
168      that it is correct, then it should be hand copied to
169      <TT
170 CLASS="FILENAME"
171 >config</TT
172 >.
173
174     </P
175 ><P
176 >     Other, less formal documents (e.g. <TT
177 CLASS="FILENAME"
178 >LICENSE</TT
179 >,
180      <TT
181 CLASS="FILENAME"
182 >INSTALL</TT
183 >) are maintained as plain text files in the
184      top-level source directory. At least for the time being.
185     </P
186 ><P
187 >     Packagers are encouraged to include this documentation. For those without
188      the ability to build the docs locally, text versions of each are kept in
189      CVS. HTML versions are also now being kept in CVS under 
190      <TT
191 CLASS="FILENAME"
192 >doc/webserver/*</TT
193 >.
194     </P
195 ><P
196 >     Formal documents are built with the Makefile targets of
197      <TT
198 CLASS="COMPUTEROUTPUT"
199 >make dok</TT
200 >, or alternately
201      <TT
202 CLASS="COMPUTEROUTPUT"
203 >make redhat-dok</TT
204 >. If you have problems,
205      try both. The build process uses the document SGML sources in
206      <TT
207 CLASS="COMPUTEROUTPUT"
208 >doc/source/*/*</TT
209 > to update all text files in
210      <TT
211 CLASS="COMPUTEROUTPUT"
212 >doc/text/</TT
213 > and to update all HTML
214      documents in <TT
215 CLASS="COMPUTEROUTPUT"
216 >doc/webserver/</TT
217 >.
218     </P
219 ><P
220 >     Documentation writers should please make sure documents build
221      successfully before committing to CVS, if possible.
222     </P
223 ><P
224 >     How do you update the webserver (i.e. the pages on privoxy.org)?
225      
226      <P
227 ></P
228 ><OL
229 TYPE="1"
230 ><LI
231 ><P
232 >        First, build the docs by running <TT
233 CLASS="COMPUTEROUTPUT"
234 >make
235         dok</TT
236 > (or alternately <TT
237 CLASS="COMPUTEROUTPUT"
238 >make
239         redhat-dok</TT
240 >).                 
241       </P
242 ></LI
243 ><LI
244 ><P
245 >        Run <TT
246 CLASS="COMPUTEROUTPUT"
247 >make webserver</TT
248 > which copies all
249         files from <TT
250 CLASS="COMPUTEROUTPUT"
251 >doc/webserver</TT
252 > to the
253         sourceforge webserver via scp.
254       </P
255 ></LI
256 ></OL
257 >
258   </P
259 ><P
260 >   Finished docs should be occasionally submitted to CVS
261    (<TT
262 CLASS="FILENAME"
263 >doc/webserver/*/*.html</TT
264 >) so that those without 
265    the ability to build them locally, have access to them if needed.
266    This is especially important just prior to a new release! Please
267    do this <I
268 CLASS="EMPHASIS"
269 >after</I
270 > the <TT
271 CLASS="LITERAL"
272 >$VERSION</TT
273 > and
274    other release specific data in <TT
275 CLASS="FILENAME"
276 >configure.in</TT
277 > has been
278    updated (this is done just prior to a new release).
279   </P
280 ><DIV
281 CLASS="SECT2"
282 ><H2
283 CLASS="SECT2"
284 ><A
285 NAME="SGML"
286 >3.1. Quickstart to Docbook and SGML</A
287 ></H2
288 ><P
289 > If you are not familiar with SGML, it is a markup language similar to HTML. 
290  Actually, not a mark up language per se, but a language used to define 
291  markup languages. In fact, HTML is an SGML application. Both will use
292  <SPAN
293 CLASS="QUOTE"
294 >"tags"</SPAN
295 > to format text and other content. SGML tags can be much
296  more varied, and flexible, but do much of the same kinds of things. The tags,
297  or <SPAN
298 CLASS="QUOTE"
299 >"elements"</SPAN
300 >, are definable in SGML. There is no set
301  <SPAN
302 CLASS="QUOTE"
303 >"standards"</SPAN
304 >. Since we are using
305  <SPAN
306 CLASS="APPLICATION"
307 >Docbook</SPAN
308 >, our tags are those that are defined by 
309  <SPAN
310 CLASS="APPLICATION"
311 >Docbook</SPAN
312 >. Much of how the finish document is
313  rendered is determined by the <SPAN
314 CLASS="QUOTE"
315 >"stylesheets"</SPAN
316 >.
317  The stylesheets determine how each tag gets translated to HTML, or other
318  formats.</P
319 ><P
320 > Tags in Docbook SGML need to be always <SPAN
321 CLASS="QUOTE"
322 >"closed"</SPAN
323 >. If not, you
324  will likely generate errors. Example: <TT
325 CLASS="LITERAL"
326 >&#60;title&#62;My
327  Title&#60;/title&#62;</TT
328 >. They are also case-insensitive, but we
329  strongly suggest using all lower case. This keeps compatibility with
330  [Docbook] <SPAN
331 CLASS="APPLICATION"
332 >XML</SPAN
333 >.</P
334 ><P
335 > Our documents use <SPAN
336 CLASS="QUOTE"
337 >"sections"</SPAN
338 > for the most part. Sections
339  will be processed into HTML headers (e.g. <TT
340 CLASS="LITERAL"
341 >h1</TT
342 > for 
343  <TT
344 CLASS="LITERAL"
345 >sect1</TT
346 >). The <SPAN
347 CLASS="APPLICATION"
348 >Docbook</SPAN
349 > stylesheets
350  will use these to also generate the Table of Contents for each doc. Our 
351  TOC's are set to a depth of three. Meaning <TT
352 CLASS="LITERAL"
353 >sect1</TT
354 >, 
355  <TT
356 CLASS="LITERAL"
357 >sect2</TT
358 >, and <TT
359 CLASS="LITERAL"
360 >sect3</TT
361 > will have TOC 
362  entries, but <TT
363 CLASS="LITERAL"
364 >sect4</TT
365 > will not. Each section requires 
366  a <TT
367 CLASS="LITERAL"
368 >&#60;title&#62;</TT
369 > element, and at least one 
370  <TT
371 CLASS="LITERAL"
372 >&#60;para&#62;</TT
373 >. There is a limit of five section 
374  levels in Docbook, but generally three should be sufficient for our 
375  purposes.</P
376 ><P
377 > Some common elements that you likely will use: </P
378 ><P
379 >  <P
380 ></P
381 ><TABLE
382 BORDER="0"
383 ><TBODY
384 ><TR
385 ><TD
386 >      <I
387 CLASS="EMPHASIS"
388 >&#60;para&#62;&#60;/para&#62;</I
389 >, paragraph delimiter. Most 
390       text needs to be within paragraph elements (there are some exceptions).
391     </TD
392 ></TR
393 ><TR
394 ><TD
395 >      <I
396 CLASS="EMPHASIS"
397 >&#60;emphasis&#62;&#60;/emphasis&#62;</I
398 >, the stylesheets
399       make this italics.
400     </TD
401 ></TR
402 ><TR
403 ><TD
404 >      <I
405 CLASS="EMPHASIS"
406 >&#60;filename&#62;&#60;/filename&#62;</I
407 >, files and directories.
408     </TD
409 ></TR
410 ><TR
411 ><TD
412 >      <I
413 CLASS="EMPHASIS"
414 >&#60;command&#62;&#60;/command&#62;</I
415 >, command examples.
416     </TD
417 ></TR
418 ><TR
419 ><TD
420 >      <I
421 CLASS="EMPHASIS"
422 >&#60;literallayout&#62;&#60;/literallayout&#62;</I
423 >, like 
424       <TT
425 CLASS="LITERAL"
426 >&#60;pre&#62;</TT
427 >, more or less.
428     </TD
429 ></TR
430 ><TR
431 ><TD
432 >      <I
433 CLASS="EMPHASIS"
434 >&#60;itemizedlist&#62;&#60;/itemizedlist&#62;</I
435 >, list with bullets.
436     </TD
437 ></TR
438 ><TR
439 ><TD
440 >      <I
441 CLASS="EMPHASIS"
442 >&#60;listitem&#62;&#60;/listitem&#62;</I
443 >, member of the above.
444     </TD
445 ></TR
446 ><TR
447 ><TD
448 >      <I
449 CLASS="EMPHASIS"
450 >&#60;screen&#62;&#60;/screen&#62;</I
451 >, screen output, implies 
452       <TT
453 CLASS="LITERAL"
454 >&#60;literallayout&#62;</TT
455 >.
456     </TD
457 ></TR
458 ><TR
459 ><TD
460 >      <I
461 CLASS="EMPHASIS"
462 >&#60;ulink url="example.com"&#62;&#60;/ulink&#62;</I
463 >, like 
464       HTML <TT
465 CLASS="LITERAL"
466 >&#60;a&#62;</TT
467 > tag.
468     </TD
469 ></TR
470 ><TR
471 ><TD
472 >      <I
473 CLASS="EMPHASIS"
474 >&#60;quote&#62;&#60;/quote&#62;</I
475 >, for, doh, quoting text. 
476     </TD
477 ></TR
478 ></TBODY
479 ></TABLE
480 ><P
481 ></P
482 ></P
483 ><P
484 > Look at any of the existing docs for examples of all these and more.</P
485 ><P
486 > You might also find <SPAN
487 CLASS="QUOTE"
488 >"<A
489 HREF="http://www.bureau-cornavin.com/opensource/crash-course/"
490 TARGET="_top"
491 >Writing Documentation
492  Using DocBook - A Crash Course</A
493 >"</SPAN
494 > useful.</P
495 ></DIV
496 ><DIV
497 CLASS="SECT2"
498 ><H2
499 CLASS="SECT2"
500 ><A
501 NAME="DOCSTYLE"
502 >3.2. <SPAN
503 CLASS="APPLICATION"
504 >Privoxy</SPAN
505 > Documentation Style</A
506 ></H2
507 ><P
508 >    It will be easier if everyone follows a similar writing style. This 
509     just makes it easier to read what someone else has written if it 
510     is all done in a similar fashion.
511    </P
512 ><P
513 >    Here it is:
514    </P
515 ><P
516 >    <P
517 ></P
518 ><UL
519 ><LI
520 ><P
521 >       All tags should be lower case.
522       </P
523 ></LI
524 ><LI
525 ><P
526 >       Tags delimiting a <I
527 CLASS="EMPHASIS"
528 >block</I
529 > of text (even small
530        blocks) should be on their own line. Like:
531        <P
532 CLASS="LITERALLAYOUT"
533 >&nbsp;&#60;para&#62;<br>
534 &nbsp;&nbsp;Some&nbsp;text&nbsp;goes&nbsp;here.<br>
535 &nbsp;&#60;/para&#62;<br>
536 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
537 >
538        Tags marking individual words, or few words, should be in-line:
539        <P
540 CLASS="LITERALLAYOUT"
541 >&nbsp;&nbsp;Just&nbsp;to&nbsp;&#60;emphasis&#62;emphasize&#60;/emphasis&#62;,&nbsp;some&nbsp;text&nbsp;goes&nbsp;here.<br>
542 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
543 >
544      </P
545 ></LI
546 ><LI
547 ><P
548 >      Tags should be nested and step indented for block text like: (except
549       in-line tags) 
550      <P
551 CLASS="LITERALLAYOUT"
552 >&nbsp;&#60;para&#62;<br>
553 &nbsp;&nbsp;&#60;itemizedlist&#62;<br>
554 &nbsp;&nbsp;&nbsp;&#60;para&#62;<br>
555 &nbsp;&nbsp;&nbsp;&nbsp;&#60;listitem&#62;<br>
556 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Some&nbsp;text&nbsp;goes&nbsp;here&nbsp;in&nbsp;our&nbsp;list&nbsp;example.<br>
557 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/listitem&#62;<br>
558 &nbsp;&nbsp;&nbsp;&#60;/para&#62;<br>
559 &nbsp;&nbsp;&#60;/itemizedlist&#62;<br>
560 &nbsp;&#60;/para&#62;<br>
561 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
562 >
563       This makes it easier to find the text amongst the tags ;-)
564     </P
565 ></LI
566 ><LI
567 ><P
568 >     Use white space to separate logical divisions within a document, 
569      like between sections. Running everything together consistently 
570      makes it harder to read and work on.
571     </P
572 ></LI
573 ><LI
574 ><P
575 >     Do not hesitate to make comments. Comments can either use the 
576      &#60;comment&#62; element, or the &#60;!--  --&#62; style comment 
577      familiar from HTML. (Note in Docbook v4.x &#60;comment&#62; is 
578      replaced by &#60;remark&#62;.)
579     </P
580 ></LI
581 ><LI
582 ><P
583 >     We have an international audience. Refrain from slang, or English 
584      idiosyncrasies (too many to list :). Humor also does not translate 
585      well sometimes.
586    </P
587 ></LI
588 ><LI
589 ><P
590 >    Try to keep overall line lengths in source files to 80 characters or less
591     for obvious reasons. This is not always possible, with lengthy URLs for
592     instance.
593    </P
594 ></LI
595 ><LI
596 ><P
597 >    Our documents are available in differing formats. Right now, they 
598     are just plain text, and HTML, but PDF, and others is always a 
599     future possibility. Be careful with URLs (&#60;ulink&#62;), and avoid 
600     this mistake:
601    </P
602 ><P
603 >     My favorite site is &#60;ulink url="http://example.com"&#62;here&#60;/ulink&#62;.
604    </P
605 ><P
606 >     This will render as <SPAN
607 CLASS="QUOTE"
608 >"My favorite site is here"</SPAN
609 >, which is 
610      not real helpful in a text doc. Better like this:
611    </P
612 ><P
613 >     My favorite site is &#60;ulink url="http://example.com"&#62;example.com&#60;/ulink&#62;.
614    </P
615 ></LI
616 ><LI
617 ><P
618 >    All documents should be spell checked occasionally.
619     <SPAN
620 CLASS="APPLICATION"
621 >aspell</SPAN
622 > can check SGML with the
623     <TT
624 CLASS="LITERAL"
625 >-H</TT
626 > option. (<SPAN
627 CLASS="APPLICATION"
628 >ispell</SPAN
629 > I think
630     too.)
631    </P
632 ></LI
633 ></UL
634 >
635  </P
636 ></DIV
637 ><DIV
638 CLASS="SECT2"
639 ><H2
640 CLASS="SECT2"
641 ><A
642 NAME="AEN221"
643 >3.3. Privoxy Custom Entities</A
644 ></H2
645 ><P
646 >  <SPAN
647 CLASS="APPLICATION"
648 >Privoxy</SPAN
649 > documentation is using 
650   a number of customized <SPAN
651 CLASS="QUOTE"
652 >"entities"</SPAN
653 > to facilitate 
654   documentation maintenance. 
655  </P
656 ><P
657 >  We are using a set of <SPAN
658 CLASS="QUOTE"
659 >"boilerplate"</SPAN
660 > files with generic text,
661   that is used by multiple docs. This way we can write something once, and use
662   it repeatedly without having to re-write the same content over and over again.
663   If editing such a file, keep in mind that it should be
664   <I
665 CLASS="EMPHASIS"
666 >generic</I
667 >. That is the purpose; so it can be used in varying 
668   contexts without additional modifications.
669  </P
670 ><P
671 >  We are also using what <SPAN
672 CLASS="APPLICATION"
673 >Docbook</SPAN
674 > calls 
675   <SPAN
676 CLASS="QUOTE"
677 >"internal entities"</SPAN
678 >. These are like variables in 
679   programming. Well, sort of. For instance, we have the
680   <TT
681 CLASS="LITERAL"
682 >p-version</TT
683 > entity that contains the current 
684   <SPAN
685 CLASS="APPLICATION"
686 >Privoxy</SPAN
687 > version string. You are strongly 
688   encouraged to use these where possible. Some of these obviously 
689   require re-setting with each release (done by the Makefile). A sampling of
690   custom entities are listed below. See any of the main docs for examples.
691  </P
692 ><P
693 >  <P
694 ></P
695 ><UL
696 ><LI
697 ><P
698 >    Re- <SPAN
699 CLASS="QUOTE"
700 >"boilerplate"</SPAN
701 > text entities are defined like:
702    </P
703 ><P
704 >    <TT
705 CLASS="LITERAL"
706 >&#60;!entity supported SYSTEM "supported.sgml"&#62;</TT
707 >
708    </P
709 ><P
710 >     In this example, the contents of the file,
711      <TT
712 CLASS="FILENAME"
713 >supported.sgml</TT
714 > is available for inclusion anywhere 
715      in the doc. To make this happen, just reference the now defined 
716      entity: <TT
717 CLASS="LITERAL"
718 >&#38;supported;</TT
719 > (starts with an ampersand 
720      and ends with a semi-colon), and the contents will be dumped into 
721      the finished doc at that point.
722    </P
723 ></LI
724 ><LI
725 ><P
726 >    Commonly used <SPAN
727 CLASS="QUOTE"
728 >"internal entities"</SPAN
729 >:
730   </P
731 ><P
732 ></P
733 ><TABLE
734 BORDER="0"
735 ><TBODY
736 ><TR
737 ><TD
738 >    <I
739 CLASS="EMPHASIS"
740 >p-version</I
741 >: the <SPAN
742 CLASS="APPLICATION"
743 >Privoxy</SPAN
744
745     version string, e.g. <SPAN
746 CLASS="QUOTE"
747 >"2.9.20"</SPAN
748 >.
749    </TD
750 ></TR
751 ><TR
752 ><TD
753 >    <I
754 CLASS="EMPHASIS"
755 >p-status</I
756 >: the project status, either 
757     <SPAN
758 CLASS="QUOTE"
759 >"alpha"</SPAN
760 >, <SPAN
761 CLASS="QUOTE"
762 >"beta"</SPAN
763 >, or <SPAN
764 CLASS="QUOTE"
765 >"stable"</SPAN
766 >.
767    </TD
768 ></TR
769 ><TR
770 ><TD
771 >    <I
772 CLASS="EMPHASIS"
773 >p-not-stable</I
774 >: use to conditionally include 
775     text in <SPAN
776 CLASS="QUOTE"
777 >"not stable"</SPAN
778 > releases (e.g. <SPAN
779 CLASS="QUOTE"
780 >"beta"</SPAN
781 >).
782    </TD
783 ></TR
784 ><TR
785 ><TD
786 >    <I
787 CLASS="EMPHASIS"
788 >p-stable</I
789 >: just the opposite.
790    </TD
791 ></TR
792 ><TR
793 ><TD
794 >    <I
795 CLASS="EMPHASIS"
796 >p-text</I
797 >: this doc is only generated as text.
798    </TD
799 ></TR
800 ></TBODY
801 ></TABLE
802 ><P
803 ></P
804 ></LI
805 ></UL
806 >
807  </P
808 ><P
809 >  There are others in various places that are defined for a specific 
810   purpose. Read the source!
811  </P
812 ></DIV
813 ></DIV
814 ><DIV
815 CLASS="NAVFOOTER"
816 ><HR
817 ALIGN="LEFT"
818 WIDTH="100%"><TABLE
819 WIDTH="100%"
820 BORDER="0"
821 CELLPADDING="0"
822 CELLSPACING="0"
823 ><TR
824 ><TD
825 WIDTH="33%"
826 ALIGN="left"
827 VALIGN="top"
828 ><A
829 HREF="cvs.html"
830 >Prev</A
831 ></TD
832 ><TD
833 WIDTH="34%"
834 ALIGN="center"
835 VALIGN="top"
836 ><A
837 HREF="index.html"
838 >Home</A
839 ></TD
840 ><TD
841 WIDTH="33%"
842 ALIGN="right"
843 VALIGN="top"
844 ><A
845 HREF="coding.html"
846 >Next</A
847 ></TD
848 ></TR
849 ><TR
850 ><TD
851 WIDTH="33%"
852 ALIGN="left"
853 VALIGN="top"
854 >The CVS Repository</TD
855 ><TD
856 WIDTH="34%"
857 ALIGN="center"
858 VALIGN="top"
859 >&nbsp;</TD
860 ><TD
861 WIDTH="33%"
862 ALIGN="right"
863 VALIGN="top"
864 >Coding Guidelines</TD
865 ></TR
866 ></TABLE
867 ></DIV
868 ></BODY
869 ></HTML
870 >