One key point for the split implementation is the management of the overflow space. Overflow pages fall into one of three varieties (implicitly). a) currently in use, b) never used, and c) previously used but currently unused. We must manage all three varieties in our program; the first variety will always appear on a chain, the second by means of an offset pointer, and the third via a list or array. The list can be managed on disk as a linked list or as an array in main memory that we will write to disk when the file is to be closed. This may not fit into a fixed sized header, so the previously used but currently unused data will be written to the end of the client data. (or even better within the pages that are being listed!) Then we only need to write probably a page at most. Maintaining the array in our program will result in fewer disk operations than writing the linked list to the file. Please use N = 1 in this exercise. The makefile according to the handout is to make three programs. It will suffice if it makes the executables lhAccess and lhIndex. interactive version: % lhAccess Datafile name author: the program returns the relavent summary record offset values. author: Or for a non-interactive version: % lhAccess outputs a list of summary record offset values. For index construction: (this program is not really interactive!) % lhIndex