C PROGRAM BWINDOW.FT C ---------------- C C SUBROUTINE BWINDOW(KX1,KX2,KY1,KY2,IOPR) C C C C PETER LEMKIN C IMAGE PROCESSING UNIT, DCBD C NATIONAL CANCER INSTITUTE C NATIONAL INSTITUTES OF HEALTH C 9000 ROCKVILLE PIKE C BETHESDA, MD. 20014 C C MARCH 17, 1977 C FEB 7, 1977 C JAN 4, 1976 C NOV 9, 1976 C NOV 5, 1976 C OCT 22, 1976 C OCT 20, 1976 C C C C INTRODUCTION C ------------ C BWINDOW.FT IS USED TO COMPUTE THE WINDOW AROUND A BOUNDARY C BY FEEDING IT (X,Y) PAIRS. IT ALSO CAN LOAD THE C WINDOW INTO FRAME AND SCALE. NOTE: ALL X,Y DATA C IS IN THE RANGE OF [0:255] FOR RANGE #1, [1:256] C FOR RANGE #2. OUT OF RANGE XY DATA IS [257,-1]. C C C IOPR FUNCTION C ---------------- C 1 ZERO BOUNDARY RANGE #1 MEMORY OVER [0:255]. C 2 LOAD (KX1,KX2,KY1,KY2)==>(HP,HS,VP,VS) INTO F&S C USING THE OFFSETS DEFINED WITH IOPR=8. C 3 INSERT (KX1,KY1) INTO RANGE OF LINE KY1 OF BND RANGE #1 C 4 FETCH (KX1<==LEFT X, KX2<==RIGHT X) FOR KY1 C OF BOUNDARY RANGE #1 C C 5 ZERO BOUNDARY RANGE #2 OVER THE RANGE[1:256]. C 6 INSERT (KX1,KX2) INTO RANGE OF LINE KY1 OF BND RANGE #2 C 7 FETCH (KX1<==LEFT X, KX2<==RIGHT X) FOR KY1 C OF BOUNDARY RANGE #2 C C 8 INITIALIZE OFFSET OF JBM FOR (KX1,KY1) C OPDEFS C ------ S OPDEF TADI 1400 S OPDEF DCAI 3400 C S OPDEF DISP1 6435 S OPDEF DISP2 6436 C C S OPDEF SWAB 7431 S OPDEF SWBA 7447 C S OPDEF MQA 7501 S OPDEF MQL 7421 S OPDEF KRS 6034 S OPDEF BSW 7002 C C S OPDEF HPL 6360 S OPDEF HSL 6361 S OPDEF VPL 6362 S OPDEF VSL 6363 C DIMENSION KLEFT(256), KRIGHT(256), ILEFT(256),IRIGHT(256) C C C C [0] DISPATCH GOTO(1,2,3,4,5,6,7,8),IOPR C C C [1] ZERO LEFT AND RIGHT FOR BOUNDARY RANGE #1 1 DO 100 I=1,256 ILEFT(I)=257 100 IRIGHT(I)=-1 RETURN C C C [2] LOAD KX1,KX2,KY1,KY2 AS RELATIVE ADDRESSES C INTO FRAME AND SCALE USING JBM AS THE BASE ADDRESS 2 CONTINUE KHP=IXOFFSET+KX1-1 KVP=IYOFFSET+KY1-1 KHS=KX2-KX1+1 KVS=KY2-KY1+1 C C CVT TO BCD KHP=IBCD(KHP,-1) KVP=IBCD(KVP,-1) KHS=IBCD(KHS,-1) KVS=IBCD(KVS,-1) S TAD \KHP S HPL S TAD \KVP S VPL S TAD \KHS S HSL S TAD \KVS S VSL RETURN C C C C [3] INSERT KX1,KY1 INTO RANGE OF KY1 OF BND RANGE #1 C IF ILEFT(1+KY1) >KX1 THEN ILEFT(1+KY1)=KX1 3 IF(ILEFT(1+KY1)-KX1)312,312,311 311 ILEFT(1+KY1)=KX1 C C IF IRIGHT(1+KY1)KX1 THEN KLEFT(KY1)=KX1 6 IF(KLEFT(KY1)-KX1)612,612,611 611 KLEFT(KY1)=KX1 C C IF KRIGHT(KY1)