MEMORY are not destroyed. If the state of MEMORY indicates that the data in MEMORY are not on random access, they must first be written to random access. Then random access data, beginning with the record containing the first word of the data item desired, are read into MEMORY. All addressing pointers are updated to reflect the changes in the absolute addresses of the data in MEMORY. This can be visualized by imagining a template marked MEMORY moving up and down over the random access file (Fig. 5-6) as the data in MEMORY change. The desired data item can then be addressed and restored to its proper COMMON area. Two service routines update the addressing pointers and perform all random access reads and writes. These routines are necessarily written in machine dependent code. A third routine clears MEMORY of unneeded data items. It is possible that random access storage would not be needed if MEMORY were increased in length and if it were cleared of unneeded data items frequently. In this case the service routines could be written as dummy routines (to avoid external referencing problems) and the memory system could be written in machine independent FORTRAN code. The extra cost of increasing the size of the MEMORY vector should be weighted against the cost of random access input and output. This memory system provides a means of storing or retrieving a complex data item by writing a single call statement. This provides for extremely efficient use of the memory system by other routines, as well as providing a completely general memory system. An added feature which helps in discovering the cause of some errors is the saving of the directory. If for some reason an error is encountered in the use of the memory system, such as failure to find a