public static void MergeRuns(DiskFunctionality df, string in1, string in2, string outTape) //merge 1 series from each input { int previous1Record = -1, record1 = df.ReadRecord(in1); int previous2Record = -1, record2 = df.ReadRecord(in2); while (true) { if (record1 != -1 && record2 != -1) { if (Compare(record1, record2)) { if (Compare(previous1Record, record1)) { df.SaveRecord(record1, outTape); previous1Record = record1; record1 = df.ReadRecord(in1); } else { df.ReturnRecord(in1); while (true) { if (Compare(previous2Record, record2)) { df.SaveRecord(record2, outTape); previous2Record = record2; record2 = df.ReadRecord(in2); if (record2 == -1) { return; } } else { df.ReturnRecord(in2); return; } } } } else { if (Compare(previous2Record, record2)) { df.SaveRecord(record2, outTape); previous2Record = record2; record2 = df.ReadRecord(in2); } else { df.ReturnRecord(in2); while (true) { if (Compare(previous1Record, record1)) { df.SaveRecord(record1, outTape); previous1Record = record1; record1 = df.ReadRecord(in1); if (record1 == -1) { return; } } else { df.ReturnRecord(in1); return; } } } } } else { if (record2 == -1) { while (true) { if (Compare(previous1Record, record1)) { df.SaveRecord(record1, outTape); previous1Record = record1; record1 = df.ReadRecord(in1); if (record1 == -1) { return; } } else { df.ReturnRecord(in1); return; } } } else if (record1 == -1) { while (true) { if (Compare(previous2Record, record2)) { df.SaveRecord(record2, outTape); previous2Record = record2; record2 = df.ReadRecord(in2); if (record2 == -1) { return; } } else { df.ReturnRecord(in2); return; } } } else { return; } } } }