Task list for cdunifpp
----------------------

- clean up interface to cdunif:
   - add to cdunifpp internal data structures all the data that it
     currently relies on storing in cdunif's data structures

   - modify cdunifpp so that most of the routines do not need to include the
     cdunif.h and cdunifint.h header files, but only use the internal data
     structures

     in particular, high-level aim is to split cuopenread_pp() into a call to
     a main function that does not see the CuFile object, followed by a call
     to a function that copies the data from cdunifpp internal structures into
     the CuFile object

     likewise other routines in cdunifpp.c

   - then package up stuff that doesn't depend on cdunif as its own library 
     (badcpp_*), and have the cdunifpp_* routines being the interface to cdunif


- continue cleanup:
    - moving code out of pp_process
    - putting routines into more sensible files
    - making clearly "helper" routines into static

   Ironically sorting out the cdunif dependency may be worth doing *before*
   further code cleanup.  Reason: there is code in pp_process() which uses
   cdunif data types, which would currently have to be passed through to any
   subroutines that are created during cleanup.  These would only have to be
   modified later.  So change them to PP internal datatypes first.

------------------------

misc notes on cdunif dependencies
---------------------------------

pp_data_copy:
    uses CuFile.dims
         CuVar.ndims
         CuVar.dims

pp_data_read:
    likewise (per pp_data_copy)

need PPdatatype replacing CuType, and add a pp_type_len function

pp_data_new:
    uses CuType, cutypelen
    
pp_get_var_type:
   returns a CuType

pp_att_new:
    returns a CuAtt
    need an identical type called PPatt and return that

similarly affected:
   pp_string_att_new:
   pp_add_att:

pp_copy_and_free_atts:
    takes CuAtts - to replace with PPAtts
     puts them into a CuFile or CuVar object - 
      need to put them into PPfile or PPvar

pp_store_dim_names:
    uses CuDim.name
(passed through via pp_var_get_extra_atts, pp_get_cell_methods)
    
pp_read_all_headers:
    uses  CuFile.controlpath

pp_create_file:
     creates a CuFile and hangs a ppfile off it - need to create only a PPfile
     make separate routine which makes a CuFile (e.g. cdunifpp_create_file())

pp_delete_file:
     likewise.

pp_get_var_name:
   uses CuVar.name


pp_process:
   reads: 
     file.controlpath

   writes:
     file.ndims
     file.nvars
     file.recdim

   calls CuCreateVars, CuCreateDims

   probably easiest to replace all CuVars with PPvars, likewise dims, and see what breaks + fix it!

Misc calls to CuError

------------------------
