 
  
  
  
 I described above how, for example, the Fortran-code DTD can allow
you to mix program source code and SGML markup.  A Fortran source file
cannot be a complete SGML document on its own, however, even though it
can be a fragment of a valid document, since there is no way to hide
the required <!DOCTYPE ...> declaration from the compiler.
The source file must therefore be part of a composite document.
Although the object that is pointed to by the General DTD's
codecollection element is a single SGML document marked up
using the programcode DTD, it need not be a single file.  A suitable
way to manage a collection of source code files, for documentation
purposes, might be as follows.
We can return to the example in Section 5.1.1, and split our `hello world' example into two files, a skeleton file holding the general structure, and including an entity which refers to the source code:
and a separate file,<!DOCTYPE programcode PUBLIC "-//Starlink//DTD Fortran Source Code 0.7//EN" [ <!ENTITY ptest-source SYSTEM 'ptest.f'> ]> <title>The `hello world' program <codegroup> <title>Group title <description>First test program <routine> <codeopener> &ptest-source;
ptest.for, containing just the source code:
      subroutine helloworld (language)
*+
*   <routinename id=hi1>
*     helloworld
*   <description>
*     Greets the world with a sunny hello
*   <argumentlist>
*   <parameter given>
*     language = _integer
*     Selects the language to use.
*     0=english, 1=sanskrit.
*   <authorlist>
*   <author id=ng affiliation='Glasgow'>Norman Gray
*-
      write (*,*) 'ack!'
      end 
  
  
 