.TITLE ATHNMP - ROUTINE TO ATTACH AND MAP TO A NAMED REGION .IDENT /V1/ ;JULY 78 .IDENT /V2/ ;DEC 78 ;DBC001 ; ROUTINE WRITTEN BY D.B.CURTIS OF THE ; FERMI NATIONAL LAB ; MODIFICATIONS: ; ;DBC001 ; D.B.CURTIS DEC 78 ADDED ANOTHER ENTRY POINT FOR FORTRAN CALLERS ;DBC001 ; ;DBC001 ;+ ; ATHNMP IS A ROUTINE TO ATTACH TO A NAMED DYNAMIC REGION AND TO MAP TO IT ; ;CALLING SEQUENCE ; CALL ATHNMP ;INPUTS ; R0=POINTER TO RAD50 COMMON NAME ; R1=ADDRESS TO MAP TO (I.E. 120000 OR 160000) ; ;OUTPUT: ; CARRY SET IF ERROR ; IF ERROR, R2= ; -1 IF UNMAPED CURRENT WINDOW OR ELIMINATED WINDOW ; -2 IF REGION DOES NOT EXIST ; ; ON NO ERROR ; R0=SIZE OF COMMON ; ; ;- .MCALL RDBBK$,WDBBK$,ATRG$S,CRAW$S,DTRG$S ; GET EXPARIMENTAL MACROS .MCALL PUSH,POP,ERR$DF .MCALL SAVRG RDB: RDBBK$ 0,0,GEN, WDB: WDBBK$ 0,0,0,0,0,,0 ERR$DF ;DEFINE ERROR ROUTINES DFDACN ;DEFINE DA CONSTANTES COMPAR: PARNAM ;2 RAD50 WORDS THAT CONTAIN PARTITION NAME TO FIND COMMON ATHNMP:: SAVRG MOV #RDB,R5 ;GET ADDRESS OF RDB MOV #WDB,R4 ;AND WDB MOV COMPAR,R.GPAR(R5) ;SAVE REQUESTED PARTITION NAME MOV COMPAR+2,R.GPAR+2(R5) ;ALL SIX CHAR MOV (R0)+,R.GNAM(R5) ;LOAD IN COMON NAME MOV (R0),R.GNAM+2(R5) CLR R.GID(R5) ;CLEAR ID WORD ATRG$S R5 ;ATTEMPT TO ATTACH TO REGION BCC 1$ JMP ATER 1$: TST R.GID(R5) ;CHECK IF REGION ATTACHED BNE 2$ JMP ATER 2$: MOV R.GID(R5),W.NRID(R4) ;LOAD WINDOW STUFF MOV R.GSIZ(R5),R3 ;GET SIZE MOV R3,W.NLEN(R4) ;FILL IN EXPED LENGTHS MOV R3,W.NSIZ(R4) ASH #-13.,R1 ;GENERATE APR BIC #^C7,R1 ;CLEAN OFF JUNK FROM MSB MOVB R1,W.NAPR(R4) ;AND SAVE IT CRAW$S R4 ;MAP BCC 3$ JMP MAPER 3$: BIT #,W.NSTS(R4) ; CHECK FOR BAD HAPPININGS BEQ 4$ JMP MAPER 4$: CLC MOV W.NSIZ(R4),R0 ASH #6,R0 ;CONBERT TO BYTES BR LEAV ATER: MOV #-2,R2 BR ERX MAPER: MOV #-1,R2 BR ERX ERX: DTRG$S R5 SEC LEAV: RETURN ;+ ;DBC001 ; ATHCMN -- ATTACH TO COMMON (FORTRAN CALL) ;DBC001 ; THIS ROUTINE ALLOWS FORTRAN CALLS TO ATHNMP ;DBC001 ; THIS ROUTINE IS FORTRAN CALLABLE AND IS A LOGICA*1 ROUTINE ;DBC001 ; AS SUCH, THIS ROUTINE SAVES NO REGISTERS ;DBC001 ; ;DBC001 ; CALLING SEQUENCE: ;DBC001 ; ;DBC001 ; LOGICAL*1 ATHCMN ;DBC001 ; IF (.NOT.ATHCMN(COMNAM,MAPOFS,STATUS))GOTO ERROR ;DBC001 ; ;DBC001 ; WHERE ;DBC001 ; COMNAM IS THE NAME OF THE COMMON TO BE ATTACHED TO ;DBC001 ; 6 RAD50 CHAR LONG ;DBC001 ; MAPOFS IS THE APR TO MAP TO ;DBC001 ; ;DBC001 ; STATUS IS RETURNED TO THE CALLER AND ;DBC001 ; ;DBC001 ; STATUS IS 1 IF NO ERROR AND SOME NEGATIVE NUMBER IF ERROR ;DBC001 ; -1 IF UNMAPPED CURRENT WINDOW OR ELIMINATED WINDOW ;DBC001 ; -2 IF REGION DOES NOT EXIST ;DBC001 ; ;DBC001 ; ATHCMN WILL BE TRUE IF ATTACHED CORRECTLY FALSE OTHERWISE ;DBC001 ; ;DBC001 ;- ;DBC001 ;DBC001 ;DBC001 TRUE=200 ;DBC001 FALSE=0 ;DBC001 ;DBC001 ;DBC001 ATHCMN:: ;DBC001 MOV 2(R5),R0 ;GET THE ADDRESS OF THE REGION NAME ;DBC001 MOV @4(R5),R1 ;GET THE APR TO USE WHEN MAPPING ;DBC001 CALL ATHNMP ;ATTEMPT TO MAP ;DBC001 BCC 1$ ;IF C CLEAR OK ;DBC001 ;DBC001 MOV R2,@6(R5) ;SAVE ERROR ;DBC001 MOV #FALSE,R0 ;SHOW ERROR ;DBC001 BR 2$ ;DBC001 ;DBC001 1$: MOV #1,@6(R5) ;SAVE OK ;DBC001 MOV #TRUE,R0 ;SHOW OK ;DBC001 2$: RETURN ;DBC001 ;DBC001 .END