.LIST TTM .TITLE ASLOOK .NLIST SYM ; ; CALL ASLOOK(INAME,JNAME,IVERSN) ; .MCALL .PRINT ; ASLOOK::TST (R5)+ ;SKIP #ARGS MOV (R5)+,(PC)+ ;STORE ADDRESS INAME: .WORD 0 ; OF INAME HERE MOV (R5)+,(PC)+ ;STORE ADDRESS JNAME: .WORD 0 ; OF JNAME HERE MOV (R5)+,(PC)+ ;STORE ADDRESS IVERSN: .WORD 0 ; OF IVERSN HERE ; MOV @#54,R0 ;ADDRESS OF RMON MOVB 276(R0),R1 ;VERSION NUMBER MOV R1,@IVERSN ;STORE VERSION NUMBER SUB #2,R1 ;SUBTRACT 2 BEQ SEARCH ;IT'S VERSION 2 ; DEC R1 ;VERSION 3 ? BEQ 1$ ;YES DEC R1 ;VERSION 4 ? BNE NOFIND ;NOPE 1$: CMP UNAM2,#570 ;FIRST TIME ? BNE SEARCH ;NO - TABLE MUST BE KNOWN MOV R0,R1 ;COPY RMON ADDRESS ADD #500,R1 ;SKIP RMON FIXED OFFSETS MOV R1,R2 ;COPY R1 ADD #400,R2 ;END SEARCH POINT LOOK: MOV (R1)+,R3 ;GET FIRST WORD SUB (PC)+,R3 ;SUBTRACT CHECK WORD .RAD50 /DK0/ ; FIRST WORD BIC #7,R3 ;WITHIN 7 ? BNE 1$ ;NO MATCH MOV @R1,R3 ;GET SECOND WORD SUB (PC)+,R3 ;SUBTRACT CHECK WORD .RAD50 /SY0/ ; SECOND WORD BIC #7,R3 ;WITHIN 7 ? BNE 1$ ;NO MATCH MOV R1,R4 ;COPY R1 CMPB (R4)+,(R4)+ ;ADD 2 TO R4 SUB R0,R4 ;SUBTRACT RMON ADDRESS MOV R4,UNAM2 ;STORE UNAM2 BR 2$ ;SKIP OTHER TEST 1$: CMP -2(R1),(PC)+ ;CHECK .RAD50 /DK / ; THIRD WORD BNE 2$ ;NO MATCH CMP @R1,(PC)+ ;CHECK .RAD50 /SY / ; FOURTH WORD BEQ 3$ ;A MATCH 2$: CMP R1,R2 ;PAST SEARCH REGION ? BLO LOOK ;NO - CONTINUE BR NOTBL ;OH - DEAR 3$: MOV UNAM2,R2 ;GET UNAM2 CMP R2,#570 ;WAS UNAM2 FOUND ? BEQ NOTBL ;NO - TOO BAD SUB R0,R1 ;SUBTRACT RMON BASE SUB #2,R1 ;POINT TO LAST UNAM2 ENTRY+2 SUB R2,R1 ;SUBTRACT UNAM2 OFFSET MOV R1,$SLOTB ;$SLOT IN BYTES SUB #4,R2 ;POINT TO LAST UNAM1 ENTRY+2 SUB R1,R2 ;SUBTRACT $SLOTB MOV R2,UNAM1 ;STORE UNAM1 ; SEARCH: MOV R0,R1 ;COPY R0 ADD (PC)+,R1 ;ADD UNAM2: .WORD 570 ; UNAM2 OFFSET MOV R1,R2 ;COPY R1 ADD (PC)+,R2 ;ADD $SLOTB: .WORD 2*16 ;$SLOT IN BYTES MOV @INAME,R3 ;WORD IN QUESTION LOOP: CMP R3,(R1)+ ;A MATCH ? BEQ MATCH ;YES CMP R1,R2 ;END OF TABLE ? BLO LOOP ;NOT YET ; ; WE SEARCHED THE TABLE BUT THERE WAS NO ASSIGNMENT ; CMP @INAME,(PC)+ ;WAS IT .RAD50 /DK / ;DK ? BNE NOFIND ;NO MOV JNAME,R1 ;GET JNAME ADDRESS MOV (PC)+,@R1 ;STORE .RAD50 /SY / ;SY RTS PC ;LEAVE ; NOFIND: MOV @INAME,@JNAME ;COPY SUPPLIED NAME RTS PC ;RETURN ; MATCH: CMPB -(R1),-(R1) ;SUBTRACT 2 SUB UNAM2,R1 ;SUBTRACT UNAM2 OFFSETT ADD (PC)+,R1 ;ADD UNAM1: .WORD 530 ; UNAM1 OFFSET MOV @R1,@JNAME ;STORE ASSIGNMENT RTS PC ; NOTBL: .PRINT #MSG CLR @IVERSN ;CLEAR VERSION NUMBER RTS PC .NLIST BEX MSG: .ASCIZ /?ASLOOK-W-Assignment table not found/ .END