PROC MIKES_GET_CORRESPONDING (MGET_CORR) IS ( LITERAL DRIVERFILE, LITERAL MAJORFILE, LITERAL OUTFILE, INT DKEYSTART, INT KLENGTH, INT MKEYSTART := 0, LITERAL ERRORFILE := "", LITERAL MATCHING := "Y", RESPONSE (RESPONSE) RESP := RESULT) BEGIN STRING PHASE, DBUFF, MBUFF, DSTR, MSTR INT FLAG, SFLAG, DFILE, MFILE, OFILE, EFILE, DKSTART, MKSTART BOOL D_END, M_END, UNMATCHED_D, WRITE_MATCHED := (MATCHING STARTSWITH "Y") WHENEVER FLAG NE 0 THEN IF FLAG > 0 THEN SMSG("ERROR WHEN " + PHASE) RESP := FLAG RETURN ELSE SMSG("WARNINGS WHEN " + PHASE) SRSMSG(FLAG) FLAG := 0 FI FI IF DKEYSTART < 1 THEN SMSG("KEYSTART STARTS AT 1 - ASSUMING 1") DKSTART := 0 ELSE DKSTART := DKEYSTART - 1 FI IF MKEYSTART < 1 THEN MKSTART := DKSTART ELSE MKSTART := MKEYSTART - 1 FI PHASE := "OPENING " + DRIVERFILE + " AS DFILE" OPF(NAM = VAL DRIVERFILE, CHA = DFILE, RES = FLAG) PHASE := "OPENING " + MAJORFILE + " AS MFILE" OPF(NAM = VAL MAJORFILE, CHA = MFILE, RES = FLAG) PHASE := "ASSIGNING " + OUTFILE AF(NAM = VAL OUTFILE, LNA = OUT, ACC = W, RES = SFLAG) IF ((SFLAG = 50144) OR (SFLAG = 31501)) THEN PHASE := "CREATING " + OUTFILE CRF(NAM = VAL OUTFILE, LNA = OUT, RES = FLAG) SVF(RES = FLAG) ELSE FLAG := SFLAG FI PHASE := "OPENING " + OUTFILE + " AS OFILE" OPF(NAM = *OUT, CHA = OFILE, ACC = O, RES = FLAG) IF ERRORFILE NE "" THEN PHASE := "ASSIGNING " + ERRORFILE AF(NAM = VAL ERRORFILE, LNA = ERR, ACC = W, RES = SFLAG) IF ((SFLAG = 50144) OR (SFLAG = 31501)) THEN PHASE := "CREATING " + ERRORFILE CRF(NAM = VAL ERRORFILE, LNA = ERR, RES = FLAG) SVF(RES = FLAG) ELSE FLAG := SFLAG FI PHASE := "OPENING " + ERRORFILE + " AS EFILE" OPF(NAM = *ERR, CHA = EFILE, ACC = O, RES = FLAG) FI DBUFF := FILL(10) MBUFF := FILL(1000) D_END := FALSE M_END := FALSE UNMATCHED_D := FALSE @ FLAG = 26272 = end of file PHASE := "READING DRIVERFILE (1)" RDR(CHA = DFILE, REC = DBUFF, RES = DFLAG) IF DFLAG NE 26272 THEN FLAG := DFLAG ELSE D_END := TRUE FI PHASE := "READING MAJORFILE (1)" RDR(CHA = MFILE, REC = MBUFF, RES = MFLAG) IF MFLAG NE 26272 THEN FLAG := MFLAG ELSE M_END := TRUE FI UNTIL (D_END AND M_END) DO DSTR := SUBSTR(DBUFF,DKSTART,KLENGTH) MSTR := SUBSTR(MBUFF,MKSTART,KLENGTH) IF D_END THEN IF WRITE_MATCHED THEN M_END := TRUE ELSE UNTIL M_END DO PHASE := "WRITING OFILE" WRR(CHA = OFILE, REC = MBUFF, RES = FLAG) PHASE := "READING MFILE (2)" RDR(CHA = MFILE, REC = MBUFF, RES = MFLAG) IF MFLAG NE 26272 THEN FLAG := MFLAG ELSE M_END := TRUE FI REPEAT FI ELSF M_END THEN @ report unmatched driver recs to error file if required IF ERRORFILE NE "" THEN UNTIL D_END DO PHASE := "WRITING ERROR FILE" WRR(CHA = EFILE, REC = DBUFF, RES = FLAG) PHASE := "READING DFILE (2)" RDR(CHA = DFILE, REC = DBUFF, RES = DFLAG) IF DFLAG NE 26272 THEN FLAG := DFLAG ELSE D_END := TRUE FI REPEAT ELSE D_END := TRUE UNMATCHED_D := TRUE FI ELSF MSTR < DSTR THEN IF NOT WRITE_MATCHED THEN PHASE := "WRITING OFILE" WRR(CHA = OFILE, REC = MBUFF, RES = FLAG) FI PHASE := "READING MFILE(2)" RDR(CHA = MFILE, REC = MBUFF, RES = MFLAG) IF MFLAG NE 26272 THEN FLAG := MFLAG ELSE M_END := TRUE FI ELSF MSTR = DSTR THEN IF WRITE_MATCHED THEN PHASE := "WRITING OFILE" WRR(CHA = OFILE, REC = MBUFF, RES = FLAG) FI RDR(CHA = DFILE, REC = DBUFF, RES = DFLAG) IF DFLAG NE 26272 THEN FLAG := DFLAG ELSE D_END := TRUE FI RDR(CHA = MFILE, REC = MBUFF, RES = MFLAG) IF MFLAG NE 26272 THEN FLAG := MFLAG ELSE M_END := TRUE FI ELSE IF ERRORFILE NE "" THEN PHASE := "WRITING ERROR FILE" WRR(CHA = EFILE, REC = DBUFF, RES = FLAG) ELSE UNMATCHED_D := TRUE FI RDR(CHA = DFILE, REC = DBUFF, RES = DFLAG) IF DFLAG NE 26272 THEN FLAG := DFLAG ELSE D_END := TRUE FI FI REPEAT PHASE := "CLOSING DFILE" CLOF(CHA = DFILE, RES = FLAG) PHASE := "CLOSING MFILE" CLOF(CHA = MFILE, RES = FLAG) PHASE := "CLOSING OFILE" CLOF(CHA = OFILE, RES = FLAG) IF ERRORFILE NE "" THEN PHASE := "CLOSING EFILE" CLOF(CHA = EFILE, RES = FLAG) FI IF UNMATCHED_D THEN SMSG("SOME UNMATCHED DRIVER RECORDS WERE FOUND BUT NOT REPORTED") FI END