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