.NLIST TTM .TITLE HGET .IDENT /RICE02/ ; CALL HGET(IHIST, IARRAY, ICH,ISIZE, ITRANS) ; THIS SUBROUTINE FILLS ARRAY IARRAY OF SIZE STARTING ; FROM CHAN ICHAN OF HISTOGRAM ; ITRANS = # WORDS ACTUALLY TRANSFERRECD ; ITRANS = 0 IF NO HIST OR ICH TOO LARGE ; CALL HPUT(IHIS,IARRAY, ICH, ISIZE, ITRANS) ; HPUT TRANSFERS DATA FROM USER ARRAY TO HISTOGRAM ;************************** FORTRAN ENTRY *************************** HGET:: JSR PC,GET ;GET ADDRESS ETC. 1$: MOV (R1)+,(R2)+ ;MOVE 1 WORD SOB R3,1$ ;CONTINUE TILL DONE RTS PC ;************************** FORTRAN ENTRY *************************** HPUT:: JSR PC,GET 1$: MOV (R2)+,(R1)+ ;MOVE 1 WORD SOB R3,1$ ;CONTINUE TILL DONE RTS PC ;RETURN TO USER GET: MOV #5,R0 ;5 INPUT PARAM JSR PC,R5CHEK JSR PC,SWIT ;GET HIST NO. MOV (R5)+,R2 ;DESTINATION ADDRESS MOV @(R5)+,R4 ;CHAN IN HIST MOV @(R5)+,R3 ;SIZE OF USER ARRAY MOV R0,SAVEC MOVB (R0)+,R1 ; 2nd dimension BIC #177400,R1 ; Strip off extra BNE 1$ MOV #1,R1 1$: CMPB (R0)+,#1 ; Is it double word? BLT END ; No, it doesn't exist BEQ 2$ ; No, skip shift ASL R1 ; Yes, it is double word 2$: ADD (R0)+,SAVEC ;SOURCE ADDRESS MUL (R0),R1 ;TOT ZSIZE = X*Y SIZES DEC R4 ;IS IT OK BMI END ;BAD OROGIN ASL R4 ;BYTEA ADDRESS ADD R4,SAVEC ;STARTING ADDRESS ASR R4 SUB R4,R1 ;SUBTRACT OROGIN FROM ARRAY SIZE BLE END ;BAD OROGIN (TOO BIG) SUB R3,R1 ;SUB ARRAY SIZE FROM HIST SIZE -OROGIN BPL .+4 ;ARRAY SIZE IS OK ADD R1,R3 ;DECREASE R3 TO RIGHT AMNT. MOV R3,@(R5)+ ;NO OF ACTUAL WDS TO USER MOV SAVEC,R1 ;WILL BE OBJ OR SOURCE RTS PC SAVEC: .WORD 0 END: TST (SP)+ ;POP RETURN ADDRESS CLR @(R5)+ ;NO HIST OR BAD CHAN # RTS PC ;RETURN .END