Programming Project for cs734, fall '05 Makefile: UNIX makefile (use "make lma") Makefile.Win32: Microsoft C makefile (use "nmake lma") lm.in1: test input file: (use "lmalm.out1", etc.) lm.out1: output file for supplied lm.c with RW not defined (all read lock requests turn into write lock requests) lm.out1_rw: expected output with working RW code. Main files you need to study, in order of handout: edt.h: global header, some comments on scanning lists, etc. ll1.h: singly-linked list header ll2.h: 2-way (doubly-linked) list header test_ll2.c: sample program for LL2 ht.h: closed hashing header test_ht.c: sample program for HT lm.h: lock manager API (public header) lm_private.h: lock manager private header: LM data structures lm.c: lock manager source: you edit this file.to add RW locks, WFG code lmdrive.c: driver for lock manager wfg.h: API for WFG (waits-for graph) wfg_private.h: WFG private header wfg.c: WFG implementation For adding latches/semaphores: latch.h: API for latches semaphore.h: API for binary semaphores Supplied code for lists, closed hashing: stack.h, queue.h: for turning lists into stacks or queues ll1.c, ll2.c, ht.c: these are "guaranteed to work"--send email to eoneil if you think something's not working. You don't need to edit these. Perhaps you don't even need to read them. The headers are supposed to say how to use them. Old cycletest code--you're replacing this, so just use it as a test against your new code. These files are in old C, but all your new code should be in ANSI C, and follow the directions to build a separate WFG. (This code just uses the LM data structures.) headers: graph.h, dfs.h code: dfs.c, dfs_adj.c, dfs_cycles.c, adj_glue.c