.NLIST TTM .TITLE MARKI .IDENT /RICE02/ ;************************** FORTRAN ENTRY *************************** ; ; CALL MARKI(M,INO,IX) ; CALL MARKF(M,IN0,X) ; M = MARKER NO. (0 TO 31) INO = HIST NO. ; IX = XVALUE FOR MARKER ; MARKI:: CALL MARK ; INTEGER MARK ROUTINE LDCIF @(R5),%1 ; CONVERT INTEGER TO FLOATING STF %1,(R4) ; STORE MARKER IN BUFFER RETURN ; RETURN MARKA:: MARKF:: CALL MARK ; SET UP TO MARK LDF @(R5)+,%1 ; GET FLOATING MARKER STF %1,(R4) ; STORE MARKER IN BUFFER RETURN ; RETURN MARK: MOV #3,R0 ; ONLY 3 PARAM CALL R5CHEK LDFPS #0 MOV @(R5)+,R4 ; GET LOCATION DEC R4 ; Now is table index CMP R4,MK$BUF ; MARKER PROPER # ? BHIS 5$ ; NO, DO NOT PROCESS ASL R4 ; Now is word pointer MOV @(R5)+,R1 ; HIST # BEQ 2$ ; IF ZERO DO NOT CHANGE HIST # MOV R4,R3 ; Marker # ADD MK$BUF+2,R3 ; Now points to hist # MOV R1,(R3) ; HIST # 2$: ASL R4 ; Now is double word index ADD MK$BUF+4,R4 ; Now points to Marker RETURN 5$: TST (SP)+ ; POP FIRST RETURN ADDRESS RETURN ; ; I = MTSTI(IVAL,IMK1,IMK2) ; I = -1 IF IVAR IS BRAKETED BY MARKERS IMK1,IMK2 ; I = 0 IF I IS OUTSIDE MARKERS AND NOT = MARKER VALUE ; MTSTI:: MOVB (R5)+,R4 ; Number of params INC R5 ; Next param LDFPS #0 LDCIF @(R5)+,%0 MKT: MOV #-1,R0 ; Set initially yes CALL MKCMP BGT 3$ ; If marker greater, failed test CALL MKCMP ; Compare with next marker BLT 3$ ; If marker smaller, failed test RETURN 3$: CLR R0 ; FAILED CUTS RETURN MKCMP: DEC R4 ; More params? BLE 1$ ; No more MOV (R5)+,R1 ; Param address CMP R1,#-1 ; Exists? BEQ 1$ ; No MOV (R1),R1 ; Marker value DEC R1 CMP R1,MK$BUF ; Marker too big? BHIS 1$ ; Skip invalid marker ASL R1 ; Word index ASL R1 ; Double word index ADD MK$BUF+4,R1 ; Location of marker CMPF (R1),%0 ; Compare marker with value CFCC RETURN 1$: ADD #2,(SP) ; Skip the branch instruction RETURN MTSTF:: MTSTA:: MOVB (R5)+,R4 ; Number of params INC R5 ; Points to first param address LDFPS #0 LDF @(R5)+,%0 BR MKT ; ; CALL MGETA(IMARK,IHIS,VALUE) ; MGETF:: MGETA:: MOV #3,R0 CALL R5CHEK LDFPS #0 MOV @(R5)+,R0 DEC R0 CMP R0,MK$BUF ; Too big? BHIS 2$ ; Yes ASL R0 ; Word pointer MOV R0,R1 ADD MK$BUF+2,R1 ; Points to hist # MOV (R1),@(R5)+ ASL R0 ; NOW IS DOUBLE WORD ADDRESS ADD MK$BUF+4,R0 ; Points to marker LDF (R0),%1 ; GET MARKER STF %1,@(R5) ; TO CALLER 1$: RETURN 2$: MOV MK$BUF,@(R5) ; Number of markers RETURN .END