"crossed-out" rows and columns. The SIMl as it was before the elim- ination of unneeded rows and columns is stored and its name put on the stack for possible access later. If a proposed tear variable is ever found to be the complement of a torn two-way edge variable, the SIM on which this decision was made is restored and the tear choices for that two-way edge are reversed by J1FIX. If an SIM must be restored from mass memory RDDISK is called to do this. Whenever J1FIX is called, the algorithm backtracks, and thus no longer needs some of the stored SIM's. These are marked as not needed, and CLRMEM is called to clear them from MEMORY. The algorithm terminates when the SIM being operated on becomes null. If SEARCH ever fails to find an SIM, a STOP 105 statement is executed. B.1.2 IlDCPL STONDX (3.1), STOSIM (3.2), RELNAM (5.9), RSTNDX (5.10), RSTSIM (5.11), SUBSIM (5.12), CALCDC (6.2), CLRMEM (6.3), HASSAL (6.5), RDDISK (6.16), SEARCH (6.17), SPEDUP (6.20), WRTDSK (6.22) The subprogram IlDCPL performs the decoupling algorithm. It first stores the SIM and INDEX data areas in MEMORY using the sub- programs STOSIM and STONDX. The execution of the decoupling algorithm itself then begins. The SIM is reduced to the unassigned functions and variables by SUBSIM. The subprograms HASSAL and SPEDUP are called to determine whether the SIM fully precedence orders. If it does the original SIM and INDEX data structures are restored using SEARCH (and WRTDSK and RDDISK if the data areon mass memory), RSTSIM and RSTNDX.