.TITLE LDLIBS - LOAD A SHAREABLE LIBRARY SUBROUTINE .IDENT /02/ ;+ ; ; THIS SUBROUTINE PROVIDES A TASK INTERFACE TO THE ; LDLIB LIBRARY LOADER TASK. TWO ENTRY POINTS ARE ; PROVIDED: ; ; FORTRAN: ; ; CALL LDLIB ( LIBNAM ) ; ; WHERE LIBNAM IS THE LIBRARY NAME IN RAD50. ; ; MACRO: ; ; JSR PC,$LDLIB ; ; WITH R0 POINTING TO THE RAD50 LIBRARY NAME ; ; THIS SUBROUTINE SENDS A MESSAGE TO LDLIB, REQUESTS IT, ; AND SUSPENDS THE SENDING TASK. ON RESUMPTION, THE ; SUBROUTINE DOES A RECEIVE, FINDS OUT THE STARTING APR # ; FOR THE LIBRARY, AND CREATES A WINDOW, THEN DOES A RECEIVE ; BY REFERENCE. THE LIBRARY IS MAPPED WHEN CONTROL IS RETURNED ; TO THE CALLER ; ; BRIAN S. MCCARTHY 21-SEP-78 ; ; MODIFIED: ; J. DOWNWARD FIXED UP ERROR HANDELING ; 29-APR-80 ; J. DOWNWARD CHANGE SUSPEND/RESUME TO ; STOP/UNSTOP 6-PAR-81 ; ;- .PAGE ; MACRO CALLS .MCALL SPND$S, WDBBK$, RREF$, SDAT$, RQST$, DIR$, STOP$S .MCALL CRAW$ .MCALL SVTK$S,EXST$S,EXIT$S ; LOCAL DATA AND DIRECTIVES WIND: WDBBK$ ,,,,,,RCVDAT ; WINDOW BLOCK FOR RECEIVE RCVDAT: .BLKW 2 ; LDLIB'S TASK NAME STAPR: .BLKW 1 ; START APR NUMBER FROM LDLIB .BLKW 7 ; REST OF RECEIVE BLOCK ERR: .WORD 0 ; ERROR INDICATOR BUFF: .BLKW 13. ; SEND DATA BUFFER SEND: SDAT$ LDLIB,BUFF ; SEND DATA DIRECTIVE REQ: RQST$ LDLIB ; REQUEST LOADER DIRECTIVE REF: RREF$ WIND ; RECEIVE BY REFERENCE DIRECTIVE CRAW: CRAW$ WIND ; CREATE ADDRESS WINDOW DIRECTIVE .PAGE ; MAIN LINE CODE LDLIB:: MOV 2(R5),R0 ; POINT R0 TO LIBRARY NAME $LDLIB::MOV (R0)+,BUFF ; MOVE TO MESSAGE MOV (R0),BUFF+2 ; CLR ERR ; INIT ERROR INDICATOR DIR$ #SEND ; DO THE SEND BCS ERR1 ; IF CS FATAL ERROR DIR$ #REQ ; REQUEST LOADER TASK BCS ERR2 ; IF CS FATAL ERROR STOP$S ; STOP ;JGD BCC 1$ ; IF STOP WAS SUCCESSFUL, SKIP SUSPEND ;JGD SPND$S ; SUSPEND THYSELF (THIS CAN'T FAIL?) ;JGD ; RECEIVE THE WINDOW BLOCK 1$: DIR$ #REF ; RECEIVE WINDOW BLOCK ;JGD BCS ERR3 ; IF CS FATAL ERROR MOV STAPR,WIND+W.NID ; FILL IN STARTING APR NUMBER MOV WIND+W.NLEN,WIND+W.NSIZ ; MOVE MAP SIZE TO WINDOW SIZE BIS #WS.MAP,WIND+W.NSTS ; FILL IN MAP BIT DIR$ #CRAW ; CREATE WINDOW AND MAP BCS ERR4 ; IF CS FATAL RETURN ; RETURN TO MAIN WITH LIB LOADED ; ERROR HANDLING ; LDLIB WILL OUTPUT ALL ERROR MESSAGES, HOWEVER THIS SUBROUTINE ; WILL EXIT WITH FATAL STAUS IF THE LOAD OPERATION FAILS. THIS WILL ; ENABLE PROGRAMS USING THE LOAD LIBRARY UTILITY TO RUN FROM WITHIN ; INDIRECT COMMAND FILES. ERR4: INC ERR ERR3: INC ERR ERR2: INC ERR ERR1: INC ERR EXST$S ERR EXIT$S ; IN CASE NO EXIT WITH STATUS .END