Take a look at the file in code/dict.c. It provides an application driver for our words abstract data type. You will notice at the top that we have the following includes
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#include "words.h"
ctype.h provides useful class test like isspace. It is good to be explicit about what you are using. The new thing here is "words.h". In C, .h files are used to provide an approximation to the abstraction capability that you get with objects in languages like Java. A .h file can declare the public methods and types. The implementation of those methods, as well as addition private ones and class elements are contained in an associated .c file. These basic mechanisms allow you to be disciplined in your programming methodology, but the language doesn't really enforce the discipline. You need to do that.

The abstraction we have in mind is a words repository where we can keep count of words of interest and how many times they appear.

The usage of this abstract type is illustrated by the main loop. (The rest should be pretty familiar.)

 ...
 initWords();                    /* Init words record */
  s = newLine(infile);
  while (s) {
    strt = startWord(s);
    while (strt) {
      end   = endWord(strt);
      word  = newWord(strt,end);

      entry = findWord(word);    /* lookup method */
      if (entry) entry->count = entry->count +1;
      else addWord(word);        /* insert method */

      strt = startWord(end);
    }
    s = newLine(infile);
  }
  printWords(ofile);             /* words pretty printer */
...