Was there a different mechanism before the NAMESPACE file?

I've downloaded the entire archive of CRAN (don't ask we why yet) and I see some old versions of packages do not have a NAMESPACE file, but I'm pretty sure they did have exported functions. Was there a different mechanism in R 1.5?
example:
https://cran.r-project.org/src/contrib/Archive/zoo/zoo_0.1-1.tar.gz (last modified 2004)

├── COPYING
├── COPYRIGHTS
├── DESCRIPTION
├── INDEX
├── R
│   └── zoo.R
└── man
    ├── as.zoo.Rd
    ├── index.Rd
    ├── plot.zoo.Rd
    └── zoo.Rd

I'm very curious!

Namespaces were added in R 1.7.0, see https://cran.r-project.org/src/base/NEWS.1.

Thanks so much for that doc, I did not know where to find such a thing!

Just so I find the passage back later:

Namespaces can now be defined for packages other than `base':
	see `Writing R Extensions'.  This hides some internal objects
	and changes the search path from objects in a namespace.  All
	the base packages (except methods and tcltk) have namespaces,
	as well as the recommended packages `KernSmooth', `MASS',
	`boot', `class', `nnet', `rpart' and `spatial'.