. . PATCH INPUT BLOCK . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG PURE CODE . . LA,U A1,<BLOCK BUFFER> . LMJ X11,PATCH . <RETURN> A1 = PATCHED BLOCK . PATCH* LA A0,IBLEN,A1 LOAD LENGTH OF BLOCK READ LR R2,X11 SAVE RETURN POINT AA,U A0,IBDATA ADD LENGTH OF BLOCK HEADER LA A3,CDPATCH,X8 LOAD ADDRESS OF PATCH BUFFER AA A0,PBVAL,A3 COMPUTE MAX LENGTH OF PATCHED BLOCK BGET . ALLOCATE A BUFFER LONG ENOUGH LX,U X5,,A0 SAVE X5 AS NEW BLOCK POINTER LA A4,IBLEN,A1 LOAD LENGTH OF INPUT BLOCK LA,U A5 LOAD LENGTH ACCUMULATOR OF OUTPUT BLOCK LA,U A2,IBDATA,X5 A2 = NEW BLOCK POINTER LX,U X6,IBDATA,A1 X6 = OLD BLOCK POINTER LXI,U X6,1 LOAD INCREMENT ON INPUT LXI,U A2,1 LOAD OUTPUT INCREMENT AA,U A3,PBSS A3 POINTS TO START OF PATCH COMMANDS LXI,U A3,1 SET UP INCREMENT . . PATCH APPLICATION ROUTINE . . EACH TIME THROUGH THIS LOOP APPLIES ONE PATCH COMMAND . . A PATCH COMMAND CONSISTS OF: . . * <# WORDS TO COPY>,<# WORDS TO DELETE> . * <# WORDS TO ADD> . <WORDS TO BE ADDED> . PSP LA,H1 A0,,A3 LOAD NUMBER TO COPY JN A4,CLORK SKIP IF OFF THE END JZ A0,NOCOPY SKIP IF NONE TO COPY TG A0,A4 MORE THAN LEFT IN BLOCK ? LA A0,A4 YES. COPY REST ANA,H1 A4,,A3 SUBTRACT NUMBER REQUESTED AA,U A5,,A0 INCREMENT NUMBER IN NEW BLOCK LR,U R1,,A0 LOAD NUMBER TO COPY BT A2,,*X6 COPY FROM OLD BLOCK TO NEW BLOCK TP,XH2 0,A3 END OF CORRECTION STREAM ? J CLORK YES. WIND UP NOCOPY LA,H2 A0,,A3 LOAD NUMBER TO DELETE JN A4,CLORK SKIP IF OFF END OF BLOCK JZ A0,NODEL SKIP IF NONE TO DELETE TG A0,A4 REQUEST TO DELETE MORE THAN REMAIN ? LA A0,A4 YES. DELETE ALL REMAINING WORDS AX,U X6,,A0 SKIP THE WORDS TO BE DELETED NODEL ANA,H2 A4,,*A3 DECREMENT WORDS TO DELETE LA A0,,*A3 LOAD NUMBER OF WORDS TO ADD JN A4,CLORK STOP IF OFF THE END JZ A0,NOADD SKIP IF NONE TO ADD AA,U A5,,A0 INCREMENT LENGTH OF NEW BLOCK LR,U R1,,A0 LOAD LENGTH OF BLOCK TO ADD BT A2,,*A3 COPY FROM PATCH BUFFER TO OUTPUT NOADD J PSP LOOP UNTIL END CLORK LXM,U A2,,X5 RESET OUTPUT TO START LXM,U X6,,A1 RESET INPUT TO START LR,U R1,IBDATA LOAD THE BLOCK HEADER LENGTH BT A2,,*X6 COPY BLOCK HEADER SA A5,IBLEN,X5 PUT PATCHED LENGTH IN BUFFER BRELP A1 RELEASE ORIGINAL BLOCK BUFFER LA,U A1,,X5 REPLACE POINTER WITH PATCHED BUFFER LX X11,R2 RESTORE RETURN POINT J 0,X11 RETURN END