ASMB,R,L,C
*     NAME:   LOAD3 
*     SOURCE: 92070-18111 
*     RELOC:  92070-16111 
*     PGMR:   D.J.W.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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 LOAD3,5,99  92070-1X111  REV.1941  800108 
* 
* 
*  THIS SEGMENT IS CALLED TO FINISH PROCESSING A PROGRAM LOAD.
*  THE TERMINATION CODE, TRMCD, INDICATES THE STATE OF THE
*  LOAD,
* 
*  TRMCD < 0,    ABORT THE LOAD,
*        = 0,    JUST TERMINATE, NO ABORT,
*        > 0,    GOOD LOAD. 
* 
* 
*  ON  A SUCCESSFUL LOAD THE OUTPUT FILE IS TRUNCATED,
*  THE SUMMARY OF LOAD OPTIONS OUTPUT TO THE LIST 
*  DEVICE, AND IF 'END' WAS SPECIFIED, THE LOADER IS TERMINATED.
* 
*  IF THE TERMINATION CODE IS SET TO 'JUST TERMINATE' THEN THE
*  LOADER CLEANS UP THE OUTPUT FILE AND CHECKS FOR ANOTHER LOAD.
*  IF 'END' WAS ISSUED BY THE USER THEN  THE TERMINATION MESSAGE
*  IS OUTPUT, ALL OPEN FILES ARE CLOSED, AND THE LOADER TERMINATED. 
* 
*  IF THE TERMINATION CODE INDICATES 'ABORT' THEN THE OUTPUT FILE 
*  IF CLEANED UP AND A CHECK IS MADE FOR ANOTHER LOAD.  IF THIS IS
*  THE LAST LOAD THEN THE 'LOADR ABORTED' MESSAGE IS OUTPUT AND 
*  THE LOADER IS ABORTED. 
* 
*  IF ANOTHER LOAD IS DESIRED A NUMBER OF FLAGS ARE RESET TO THEIR
*  INITIAL VALUE AND CONTROL IS TRANSFERED BACK TO ENTRY 'RSTRT' IN 
*  THE LOADER MAIN. 
* 
* 
* 
      SKP 
      ENT LOAD3 
* 
      EXT .DFER, .MVW,#LIBS,#SGMT,BPFWA,CBP.L 
      EXT CLOSE,COMTP,CPL.L,DBFLG,DRKEY, EXEC 
      EXT FCLSA,FDONE,FMPER,FORCD,INAMR, LDCB 
      EXT LNAMR, MERR,MSEGF,MXREC 
      EXT NEXTF, ODCB,ONAMR,OTDFT,OUTOP 
      EXT P.ROR,PGFWA,PL.ST,PROGN,PROGT, PRTN 
      EXT RMPAR,RSTRT,SPACE,SYOUT,TH1.L,TH2.L 
      EXT WRITF 
* 
A     EQU 0 
B     EQU 1 
* 
TRMCD NOP           TERMINATION CODE
      BSS 4         FILL FOR RMPAR
I.ERR BSS 1         ERROR PARAMETER 
#RECS BSS 1         NUMBER OF RECORDS TO BE TRUNCATED 
* 
LOAD3 JSB RMPAR     PICK UP PARAMETERS
      DEF *+2 
      DEF TRMCD     THE TERMINATION CODE IS THE ONLY PARM 
* 
      LDA TRMCD     DETERMINE PROGRAM LOAD STATE
      SSA           ABORT ? 
      JMP ABORT     YES 
      SZA,RSS       JUST TERMINATE ?
      JMP TERML     YES 
      HED SUCCESSFUL LOAD 
* 
*  THE LOAD WAS SUCCESSFUL. 
* 
      LDA MXREC     SUCCESSFUL LOAD, GET MAX RECORD WRITTEN 
      CMA,INA       CALCULATE NUMBER OF RECORDS TO TRUNCATE 
      ADA ONAMR+7   NUMBER OF RECORDS IN THE FILE 
      STA #RECS     SET NUMBER OF RECORDS TO TRUNCATE 
      JSB CLOSE     CLOSE THE FILE AND TRUNCATE 
      DEF *+4 
      DEF ODCB
      DEF I.ERR 
      DEF #RECS 
* 
      JSB .DFER     MOVE NAME INTO OUTPUT MESSAGE 
      DEF NAME      DESTINATION ADDRESS 
      DEF ONAMR+0   SOURCE ADDRESS
      JSB MESSS     OUTPUT END MESSAGES 
      JSB RESET     CHECK FOR ANOTHER LOAD
      JMP RSTRT     GOT ONE, RETURN TO MAIN 
* 
      LDA PL.ST     ARE WE LISTING AT ALL ? 
      SZA,RSS       WELL ?
      JMP EXIT1     NO LISTING AT ALL 
* 
      LDA P4        OUTPUT FINAL END MESSAGE
      LDB ENDMS     'PROGRAM NAME' READY
      JSB SYOUT     USE SYOUT 
* 
      JSB WRITF     WRITE EOF TO LIST DEVICE
      DEF *+5 
      DEF LDCB+0
      DEF I.ERR+0 
      DEF IDUM
      DEF N1
* 
      SSA           FMP ERROR ? 
      JMP ELIST     ERROR OR LIST FILE WRITE
* 
EXIT1 JSB FCLSA     CLOSE ALL OPEN FILES
      LDA BLANK     BLANK OUT 4P AND 5P 
      STA NAME+3    WILL BE GLOBAL 4P 
      STA NAME+4    WILL BE GLOBAL 5P 
      JSB PRTN      RETURN PARMS FOR THOSE
      DEF *+2       UNDER BATCH 
      DEF NAME      1 - 5P
* 
* 
      JSB EXEC      AND TERMINATE !!!!! 
      DEF *+2 
      DEF P6
* 
ELIST JSB FMPER 
      DEF LNAMR+0 
      JMP ABORT 
* 
* 
P6    DEC 6 
P3    DEC 3 
P4    DEC 4 
N1    DEC -1
P12   DEC 12
IDUM  NOP 
MESS4 DEF *+1 
NAME  ASC 6,       READY
ENDMS DEF *+1 
      ASC 2,$END
      HED JUST TERMINATE THE LOAD 
* 
*  LOAD UNSUCCESSFUL, JUST TERMINATE THIS LOAD
* 
TERML LDA OUTOP     DID WE OPEN THE OUTPUT FILE ? 
      SZA,RSS       WELL ?? 
      JMP TERM1     NO, DON'T PURGE IT THEN 
* 
      JSB CLOSE     TO PURGE A TYPE SIX WE MUST CLOSE AND TRUNCATE
      DEF *+4 
      DEF ODCB
      DEF I.ERR 
      DEF ONAMR+7   NUMBER OF RECORDS IN THE FILE 
* 
TERM1 JSB RESET     CHECK FOR ANOTHER LOAD
      JMP RSTRT     GOT ONE, RETURN TO MAIN 
* 
      JSB FCLSA     CLOSE ALL OPEN FILES
      JSB .DFER     MOVE LOADER ERROR MESSAGE 
      DEF NAME      INTO THE GLOBAL RETURN BUFFER 
      DEF MERR,I
      LDA LDASH     SET 4P = L- 
      STA NAME+4
      CLA           SET 5P = 0
      STA NAME+4
      JSB PRTN      SEND GLOBALS BACK FOR THOSE UNDER BATCH 
      DEF *+2 
      DEF NAME
      JSB EXEC      AND JUST TERMINATE THE LOAD 
      DEF *+2 
      DEF P6
      HED               ABORT PROCESSING
* 
*  UNSUCCESSFUL LOAD, ABORT THIS PROGRAM LOAD 
* 
ABORT LDA OUTOP     HAS OUTPUT FILE BEEN OPENED ? 
      SZA,RSS 
      JMP ABOR1     NO OUTPUT FILE
* 
      JSB CLOSE     PURGE = CLOSE AND TRUNCATE
      DEF *+4 
      DEF ODCB      OUTPUT DCB
      DEF I.ERR     ERROR PARM
      DEF ONAMR+7   ALL RECORDS IN THE FILE 
* 
      SSA           FMP ERROR ? 
      JMP ERROR     YES, GO REPORT
* 
ABOR1 JSB RESET     CHECK FOR ANOTHER LOAD
      JMP RSTRT     GOT ONE, RETURN TO MAIN 
* 
      LDA P13       NO, OUTPUT TERMINATION MESSAGE
      LDB MES10     'LOADR ABORTED' 
      JSB SYOUT 
      JSB WRITF     SEND AN EOF TO THE LIST DEVICE
      DEF *+5 
      DEF LDCB+0    LIST DCB
      DEF I.ERR+0   ERROR PARM
      DEF IDUM      DUMMY PARM
      DEF N1        LENGTH -1 
      JSB FCLSA     CLOSE ALL OPEN FILES
      JSB .DFER     MOVE THE ERROR INTO THE GLOBALS 
      DEF NAME      DESTINATION BUFFER
      DEF MERR,I    ERROR MESSAGE 
      LDA LDASH     SET 4P = 'L-' 
      STA NAME+3
      CLA           AND 5P = 0
      STA NAME+4
      JSB PRTN      RETURN GLOBALS FOR THOSE UNDER BATCH
      DEF *+2 
      DEF NAME
* 
      JSB EXEC      SO LONG !!! 
      DEF *+2 
      DEF P6
* 
ERROR JSB FMPER     GOT A FMGR ERROR ON THE OUTPUT FILE 
      DEF ONAMR+0 
      JMP ABOR1     FINISH ABORT PROCESSING 
* 
BLANK ASC 1,
LDASH ASC 1,L-
MES10 DEF *+1 
      ASC 7,LOADR ABORTED 
P13   DEC 13
      HED PREPARE FOR NEXT LOAD 
* 
* 
*  RESET IS CALLED TO RESET LOADER FLAGS TO PREPARE FOR 
*  THE NEXT PROGRAM LOAD.  RESET CHECKS THAT ANOTHER LOAD 
*  IS DESIRED.
* 
*  CALLING SEQUENCE:  JSB RESET 
* 
*  ON RETURN:   P+1:  ANOTHER LOAD DESIRED
*               P+2:  NO MORE LOADS 
* 
* 
RESET NOP 
      LDA NEXTF     USER DESIRES ANOTHER LOAD ? 
      SZA 
      JMP RSET1     YES, THEY ASKED FOR IT
* 
      ISZ RESET     NO MORE LOADS 
      JMP RESET,I   RETURN TO CALLER
* 
RSET1 CCA           RESET FLAGS FOR NEXT LOAD 
      STA COMTP     SET NO OR LOCAL COMMON
      CLA 
      STA NEXTF 
      STA ONAMR     OUTPUT FILE NOT OPENED
      STA MXREC     MAXIMUM RECORD WRITTEN ON LOAD
      STA INAMR+3   NO RELOCATABLE INPUT FILE 
      STA OTDFT     DEFAULT OUTPUT FILE 
      STA P.ROR     PROGRAM PRIORITY LEVEL
      STA FDONE     MAIN NOT LOADED 
      STA DBFLG     NO DEBUG ACCESSED 
      STA FORCD     NO FORCE LOAD 
      STA #SGMT     NO SEGMENTS IN LOAD 
      STA OUTOP     OUTPUT FILE NOT OPENED
      STA MSEGF     FINAL SEGMENT FLAG
      STA #LIBS     NUMBER OF USER LIBRARIES
      CLB,INB 
      STB PL.ST     LISTING OPTION
      STB CPL.L     CURRENT PAGE LINKING
      LDB PROGT     IF PROGRAM IS REAL-TIME 
      SZB 
      JMP RTIME     NO, REAL-TIME PROGRAM 
      STA TH2.L 
      STA CBP.L 
      JMP RETRN 
RTIME LDB TH2.L 
      STB PGFWA     SET NEW PROGRAM FIRST WORD
      STA TH2.L 
      LDB CBP.L     SET NEW BASE PAGE FIRST WORD
      STB BPFWA 
      STA CBP.L     CLEAR CURRENT BASE PAGE + 1 
RETRN JSB SPACE     SPACE UP A BLANK
      JMP RESET,I   START NEXT LOAD 
      HED OUTPUT LOAD DETAILS 
* 
* 
*  MESSS OUTPUTS THE SUMMARY OF LOADER OPTIONS TO THE LIST
*  DEVICE.  THERE IS NO ERROR RETURN FROM MESSS.  A SAMPLE
*  MESSAGE IS SHOWN BELOW WITH THE OTHER OPTIONS SHOWN IN 
*  BRACKETS:
* 
*     CURRENT PAGE    REAL-TIME       SYSTEM COMMON 
*    [BASE PAGE   ]  [BACKGROUND]    [FORCE]
*                                    [DBUGR]
* 
MESSS NOP 
      JSB SPACE 
      LDA CPL.L     GET LINK WORD 
      SZA,RSS       CURRENT OR BASE PAGE ?
      JMP TPROG     BASE PAGE, CHECK PROGRAM TYPE 
      LDA MCLNK     GET CURRENT PAGE LINK MESSAGE ADDRESS 
      LDB MESSX     AND ADDRESS IN OUTPUT BUFFER
      JSB .MVW
      DEF P6
      NOP 
* 
TPROG LDA PROGT 
      SZA,RSS 
      JMP COMMN     BACKGROUND, CHECK COMMON TYPE 
      LDA ARTME     ADDRESS OF REAL-TIME MESSAGE
      LDB AMX8
      JSB .MVW
      DEF P6
      NOP 
* 
COMMN LDB AMX16     GET CURRENT BUFFER POINTER
      STB CPNTR     SET ASIDE FOR NEXT MESSAGE
      LDA COMTP     GET COMMON TYPE WORD
      SSA           -1 = NO OR LOCAL COMMON, 2 = SYSTEM COMMON
      JMP DEBUG     NO COMMON, CHECK OUT DEBUG
      LDA ASCOM 
      JSB .MVW
      DEF P7
      NOP 
      LDB CPNTR     BUMP CURRENT BUFFER POINTER 
      ADB P9
      STB CPNTR 
* 
DEBUG LDA DBFLG     GET DEBUG FLAG
      SZA,RSS 
      JMP FORLD     CHECK OUT FORCE LOAD
      LDA ADBUG 
      JSB .MVW
      DEF P3
      NOP 
      LDB CPNTR 
      ADB P5
      STB CPNTR 
* 
FORLD LDA FORCD 
      SZA,RSS 
      JMP OUTMS 
      LDA AFORC 
      JSB .MVW
      DEF P3
      NOP 
* 
OUTMS LDA MESSX 
      LDB LMESX 
      JSB DRKEY 
* 
      JSB SAACE 
      LDA P12 
      LDB MESS4 
      JSB SYOUT 
* 
      JMP MESSS,I 
* 
MESSX DEF *+1 
XMES  ASC 16,BASE PAGE       BACKGROUND 
      ASC 25, 
AMX16 DEF XMES+16 
AMX8  DEF XMES+8
P5    DEC 5 
ARTME DEF *+1 
      ASC 6,REAL-TIME 
MCLNK DEF *+1 
      ASC 6,CURRENT PAGE
ASCOM DEF *+1 
      ASC 7,SYSTEM COMMON 
ADBUG DEF *+1 
      ASC 3,DBUGR 
AFORC DEF *+1 
      ASC 3,FORCE 
CPNTR NOP 
P9   DEC 9
P7   DEC 7
LMESX DEC 73
      END LOAD3 
                                                                                                                                                                                  