The interface to the words recorder is contained in code/word.h. It is reproduced here.
#ifndef	_WORD_H_
#define	_WORD_H_

struct wordEntry {
  int count;
  char *word;
};

void initWords();
struct wordEntry *findWord(char *word);
struct wordEntry *addWord(char *word);
void printWords(FILE *ofile);

#endif	/* _WORD_H_ */
The #ifndef, #define, #endif preprocessor statements allow this include file to appear multiple times without harm. This allows include files to include what they need, even if something else already included them. It is a good habit.

The struct declaration defines a wordEntry object. In this case we have made this visible inside and outside of the word recorder.

The word recorder interface has four functions to initialize a repository, lookup a word in the repository, insert one that is not already there, and print the entire repository.

The more interesting part is what is not here. It does not show how the repository itself is represented. Is it an array of wordEntries? A list of them? An array of pointers to them? Who knows.