anchor.diff:      (push (make-asset :type type
                         :name (key-value :name props)
                         :filename (key-value :file props)
  +                      :alias (key-value :alias props)
                         :properties props)
             *assets*)))
   
  
positive.code:   "Load the specified asset from disk using whatever valid loader exist.
  If the optional argument TYPE is provided then NAME is used as the filename to load from.
  Otherwise an asset declaration for the provided NAME is searched. If such a declaration
  exists then the corresponding asset is loaded, otherwise an error occurs."
    (format t "Loading asset ~S~%" name)
    (with-resource-manager *content-manager*
      (when (existing-resource-p identifier)
        (warn "Asset already loaded or identifier conflict for ~A." identifier))
      (let* ((pathname (merge-pathnames (if type
                                            name
                                            (asset-filename (find-asset-declaration name)))
                                        *content-directory*))
             (loader (%asset-loader (if type type
                                        (asset-type (find-asset-declaration name)))
                                        pathname)))
        (if loader
            (use-resource identifier (funcall (asset-loader-load loader) pathname)
                          (asset-loader-unload loader))
            (error "No asset loader defined for ~S~%" type)))))
  
  (defun dispose-asset (identifier)
    "Dispose designated asset regardless of its current users."
  
negative.code: (defvar *assets* nil)
  
  (defstruct asset
    "Holds assets meta-data."
    type
    name
    alias ;; if non-NIL, should contain the real asset name
    filename
    properties)
  
  (defun find-asset (name)
    (find-if (lambda (it)
               (equal (asset-name it) name))
             *assets*))
  