ASMB,R,Q,C
*     NAME:   OTFIX 
*     SOURCE: 92071-18022 
*     RELOC:  92071-16022 
*     PGMR:   B.W.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
* 
      NAM OTFIX,7  92071-1X022  REV.2041  800429
* 
* 
* OTFIX 
*  OUTPUT RECORD TO RELINK TABLE AT THE END OF THE OUTPUT FILE. 
*  THE RELINK TABLE IS BUILT UP FROM THE BOTTOM OF THE FILE TOWARD
*  THE PROGRAM CODE. IN THE SEGMENT LOAD3 THE RELINK TABLE IS 
*  MOVED UP TO THE END OF THE PROGRAM CODE AND THE REST OF THE
*  FILE TRUNCATED.
* 
*  CALLING
*     A REG    <0  POST LOCAL BUFFER TO OUTPUT
*              >0  ADDRESS OF SOURCE BUFFER TO OUTPUT 
*     B REG        LENGTH IN WORDS OF THE BUFFER TO OUTPUT
* 
*     JSB OTFIX 
*              P+1 ERROR RETURN MESSAGE ALREADY PRINTED.
*              P+2 SUCESSFUL TRANSFER OF BUFFER HAS OCCURED 
* 
* INITIALIZE
*  ON THE FIRST CALL TO OTFIX THE INITIALIZATION ROUTINE
*  IN.OT WILL BE CALLED TO SET UP LOCAL CONTROL VARIABLES.
*  THIS ROUTINE WILL OVERLAY ITS CALL TO PREVENT MULTIPLE 
*  EXECUTION
* 
* GLOBALS 
* LDRER             LOADER ERROR PRINT ROUTINE
* FMPER             LOADER FMP ERROR ROUTINE
* .MVW              MOVE WORDS
* WRITF             FMP OUTPUT ROUTINE
* 
* I.ERR             FMP ERROR VARIABLE
* CFREC             LOCAL CURRENT RECORD BEING OUTPUT INIT BY IN.OT 
* MXREC             MAX RECORD BEING WRITTEN TO OUTPUT BY PROGRAM 
* ONAMR             OUTPUT FILE NAMR
* 
* 
      ENT OTFIX 
      EXT CFREC,I.ERR,MXREC,ONAMR 
      EXT WRITF,LDRER,FMPER,.MVW
      EXT ODCB
* 
A     EQU 0 
B     EQU 1 
      HED IN.OT 
* 
* INITIALIZE LOCAL VARIABLES FOR USE BY OTFIX 
* 
IN.OT STB ILEN      SAVE B REG
      LDB ONAMR+7   GET LAST RECORD IN OUTPUT FILE
      STB CFREC     TO USE AS CURRENT RELINK RECORD 
      LDB @SSA      OVERLAY JMP INSTRUCTION 
      STB FIX       SET INIT CALL TO NOP SO THAT ONLY 
      LDB ALWA      CALLED ONE TIME!
      INB 
      CMB 
      STB NLWA2     SET ADDRESS -(LWA + 2)
      INB 
      STB NLWA1     SET ADDRESS -(LWA + 1)
      LDB ILEN      RECOVER B REG 
      JMP FIX       RETURN
* 
@SSA  SSA,RSS       OVERLAY INSTRUCTION 
      HED OTFIX 
* 
* 
* 
OTFIX NOP 
* 
* CUT REQUEST DOWN TO SIZE THAT CAN BE HANDLED
* 
FIX   JMP IN.OT     INITIALIZED??  IF YES IS OVERLAYED
*     SSA,RSS       POST REQUEST?  BY THIS LINE 
      JMP RETRY     NO
      JSB POST      YES 
      JMP RETRN         DO NORMAL RETURN AFTER POST 
RETRY STB ILEN      SAVE REQUESTED INPUT LENGTH 
      ADB AFWA      ADD TO CURRENT POSITION POINTER 
      ADB NLWA2     TOO LONG FOR CURRENT BUFFER?
      SSB,RSS 
      JMP *+3       YES 
      JSB MOVBF     NO  OUTPUT
      JMP RETRN     NORMAL RETURN 
      INB 
      STB NXLEN     LENGTH TO REQUEST ON NEXT RETRY 
      CMB,INB 
      ADB ILEN
      STB ILEN      MAX LENGTH THAT CAN TRANSFER THIS TIME
      JSB MOVBF     MOVE OUT THE CURRENT BUFFER 
      LDB NXLEN 
      JMP RETRY 
      HED MOVBF 
* 
* 
* 
MOVBF NOP 
* 
*MOVE RECORD TO BUFFER (ALWAYS FITS) AND POST IF FULL 
* 
      LDB AFWA      PUT INPUT INTO BUFFER 
      JSB .MVW
      DEF ILEN
      NOP 
      STB AFWA      SET NEW FIRST WORD AVAILABLE
      ADB NLWA1     BUFFER FULL ? 
      SSB 
      JMP MOVBF,I   NO
      JSB POST      YES 
      JMP MOVBF,I 
      HED POST
* 
* 
* 
POST  NOP 
      STA TEMP1     SAVE A REGISTER 
      LDA AFWA      SEE IF ANY DATA IN BUFFER?
      CPA ASTBF 
      JMP RTN       NO !
      LDA CFREC     YES   CHECK FOR OVERFLOW
      CMA 
      ADA MXREC     COLLIDED WITH PROG CODE?
      SSA,RSS 
      JMP OVFLD     YES 
* 
      JSB WRITF     WRITE LOCAL BUFFER
      DEF *+6 
      DEF ODCB+0    OUTPUT DCB OPENED TYPE 1
      DEF I.ERR     ERROR PARM
ASTBF DEF BUF.O+0   LOCAL OUTPUT BUFFER 
      DEF P128      LENGTH OF LOCAL BUFFER
      DEF CFREC     CURRENT RECORD# 
      SSA           ERROR?
      JMP ERR       YES 
* 
* RESET POINTERS
* 
      LDA ASTBF 
      STA AFWA      RESET CURRENT FIRST WORD AVAILABLE
      LDA CFREC 
      ADA N1        STEP TO NEXT RELINK TABLE RECORD
      STA CFREC 
RTN   LDA TEMP1     RECOVER A REGISTER
      JMP POST,I    RETURN
      HED ERR 
* 
* 
* 
ERR   JSB FMPER 
      DEF ONAMR     OUTPUT NAMR 
      JMP OTFIX,I   ERROR RETURN
* 
OVFLD LDA P10       OV OUT ERROR
      JSB LDRER 
      JMP OTFIX,I   ERROR RETURN
* 
RETRN ISZ OTFIX     NORMAL RETURN 
      JMP OTFIX,I 
* 
P10   DEC 10
P128  DEC 128 
N1    DEC -1
NXLEN BSS 1 
ILEN  BSS 1 
TEMP1 BSS 1 
NLWA1 BSS 1 
NLWA2 BSS 1 
AFWA  DEF BUF.O+0   INITIALIZE TO START OF OUTPUT BUFFER
BUF.O BSS 128       OUTPUT BUFFER 
ALWA  DEF *-1 
      END 
    