C PROGRAM DSPNGH.FT C ------------------- C C C SUBROUTINE DSPNGH(JBM1,JHGH1,JX,JY,JSIZE) C C C P LEMKIN C NIH C BETHESDA, MD C C C JAN 14, 1977 C JAN 8, 1977 C JAN 4, 1977 C NOV 22, 1976 C NOV 15, 1976 C NOV 10, 1976 C NOV 8, 1976 C PURPOSE C ------- C DISPLAY FUNCTION OF DATA IN RIGHT QMT DISPLAY REGISTER. C C C FUNCTION C --- -------- C 2 DISPLAY A FUNCTION OF THE DATA POINTED TO BY C THE CURSOR IN THE RIGHT QMT DISPLAY. FBW6 DETERMINES C THE PARTICULAR FUNCTION. C FBW6 C ---- C 0 DISPLAY PIXEL GRAY VALUE C 1 DISPLAY GRAD4 IN RIGHT QMT DISPLAY C 2 DISPLAY LAPLACIAN IN RIGHT QMT DISPLAY C 3 DISPLAY AVG8 IN RIGHT QMT DISPLAY C 4 DISPLAY MEAN IN RIGHT 3 DIGITS, STD DEV C IN LEFT 4 DIGITS OF DENSITY. USING NEIGHBORHOOD C OF SIZE (1+2*FBW5). C 5 DISPLAY MAX==>RIGHT 3 DIGITS, MIN==>LEFT 4 DIGITS C OF NEIGHBORHOOD OF SIZE (1+2*FBW5). DIMENSION IB(2),IFBW(12) DIMENSION I10(1),I11(1),I12(1),I13(1),I14(1),I15(1) DIMENSION I16(1),I17(1),I18(1) C C C C [1] DEFINE BMOMNI CALLS MRDFBW=22 MFETCH2D=10 MPACK2D=11 MRDLINE=12 C MLDQMT=23 MLDFS=19 MQPROG=29 C C C COPY ARGS TO LOCAL IBM1=JBM1 IHGH1=JHGH1 IX=JX IY=JY ISIZE=JSIZE C MRDFBW=22 CALL BMOMNI(0,0, 0,0,0, IFBW, MRDFBW) IFBW6=IFBW(6) C C [1] IF FBW6 > 0 C THEN [GET NEIGHBORHOOD AND THEN DISPLAY C GRAD4 (0, LAPLACIAN (1), AVG8 (2) C (MEAN,STDDEV)(3)==> C RIGHT QMT DISPLAY] C ELSE DISPLAY DENSITY; C CALL BMOMNI(IBM1,IHGH1,(IX),(IY),I18,IB,MFETCH2D) IZ=I18 S DCA \IB# /ZERO HIGH BITS C C [2] IF FBW3[2] NEQ 0 THEN GET NEIGHBORHOOD S TAD \IFBW6 S AND (0007 S IAC S DCA \IFUN GOTO(181,180,180,180,180,180,181,181),IFUN C C C [3] GET THE NEIGHBORHOOD 180 CALL BMOMNI(IBM1,IHGH1,(IX-1),(IY-1),I13,IB,MFETCH2D) CALL BMOMNI(IBM1,IHGH1,(IX),(IY-1),I12,IB,MFETCH2D) CALL BMOMNI(IBM1,IHGH1,(IX+1),(IY-1),I11,IB,MFETCH2D) C CALL BMOMNI(IBM1,IHGH1,(IX-1),(IY),I14,IB,MFETCH2D) CALL BMOMNI(IBM1,IHGH1,(IX+1),(IY),I10,IB,MFETCH2D) C CALL BMOMNI(IBM1,IHGH1,(IX-1),(IY+1),I15,IB,MFETCH2D) CALL BMOMNI(IBM1,IHGH1,(IX),(IY+1),I16,IB,MFETCH2D) CALL BMOMNI(IBM1,IHGH1,(IX+1),(IY+1),I17,IB,MFETCH2D) C GOTO(181,200,201,202,190,190,181,181),IFUN C C C C [3.1] IF FBW6=1 C THEN COMPUTE GRAD4 C C COMPUTE ROBERTS GRADIENT OF AVGED NEIGHBORHOOD 200 I45=IABS((I10+I11+I12)-(I14+I15+I16)) I135=IABS((I12+I13+I14)-(I16+I17+I10)) IGRAD=MAX(I45,I135) IZ=IGRAD GOTO 181 C C C [3.2] IF FBW6=2 C THEN COMPUTE LAPLACIAN C C COMPUTE LAPLACIAN 201 LAPLACIAN=IABS((I10+I11+I12+I13+I14+I15+I16+I17)-(8*I18)) IZ=LAPLACIAN GOTO 181 C C C C [3.3] IF FBW6 = 3 C THEN COMPUTE AVG8 202 IAVG8=(I10+I11+I12+I13+I14+I15+I16+I17+I18)/9 IZ=IAVG8 GOTO 181 C C C C C [3.4] IF FBW6=4 OR 5 C THEN COMPUTE THE STATISTICS OF NEIGHBORHOOD C 190 IY1=IY+1 IX1=IX+1 AVG=0.0 VAR=0.0 C IMIN=257 IMAX=-1 ISIZE=MAX(ISIZE,1) KY1=MAX((IY1-ISIZE),1) KX1=MAX((IX1-ISIZE),1) KY2=MIN((IY1+ISIZE),256) KX2=MIN((IY1+ISIZE),256) SIZE=FLOAT(KX2-KX1+1)*FLOAT(KY2-KY1+1) C DO NOT DIVIDE BY SIZE IF SIZE=0 IF(SIZE)2047,2047,191 C C COMPUTE MEAN 191 DO 1801 IY1=KY1,KY2 S CPAGE 3 S JMS TTYCTL S JMP \2047 /ABORT C IY=IY1-1 C S CPAGE 3 S JMS TTYCTL S JMP \2047 C DO 1801 IX1=KX1,KX2 IX=IX1-1 CALL BMOMNI(IBM1,IHGH1,IX,IY,IZ,JUNK,MFETCH2D) IMIN=MIN(IZ,IMIN) IMAX=MAX(IZ,IMAX) 1801 AVG=AVG+FLOAT(IZ) IAVG=AVG/SIZE C IF(IFBW6-4)181,1804,1805 C C C COMPUTE VARIANCE AS WELL 1804 DO 1802 IY1=KY1,KY2 IY=IY1+1 S CPAGE 3 S JMS TTYCTL S JMP \2047 C DO 1802 IX1=KX1,KX2 IX=IX1-1 CALL BMOMNI(IBM1,IHGH1,IX,IY,IZ,JUNK,MFETCH2D) D=IABS(IZ-IAVG) 1802 VAR=VAR+(D*D) ISTDEV=SQRT(VAR/SIZE) C C [3.4.1] IF FBW6=4 C THEN STD==>LFT, MEAN==>RHT; IB(2)=MIN(999,ISTDEV) IB(1)=IAVG GOTO 182 C C C [3.4.2] IF FBW6=5 C THEN MIN==>LFT, MAX==>RHT IF(IFBW6-5)182,1805,182 1805 IB(2)=IMIN IB(1)=IMAX GOTO 182 C C C C [4] LOAD INTO RIGHT QMT DISPLAY 181 IB=IZ 182 CALL BMOMNI(0,0 ,0,0,0, IB,MLDQMT) C C 2047 RETURN C ************************************************************ C SUBROUTINE: T T Y C T L (INTERNAL) C ************************************************************ C S CPAGE 3 S RTTYC, JMP I TTYCTL S TTYCTL, 0000 /ENTRY C S OPDEF FBW3 6343 S FBW3 S AND (0001 S SZA CLA S JMP RTTYC /ABORT C S KSF /ANYTHING TYPED S JMP NORMAL /NO, RETURN NORMALLY S KRB /GET TYPED CHARACTER S AND (0177 /TAKE CARE OF PARITY PROBLEMS S TAD (-17 /TEST FOR CTRL/O S SNA /SKIP IF NOT CTRL/O S JMP RTTYC /ABORT CALLING ROUTINE (ERROR RETURN) S TAD (-4 /TEST FOR CTRL/S [-17-4=-23(OCTAL)] S SZA CLA /SKIP IF CTRL/S S JMP NORMAL /NOT CTRL/O OR CTRL/S SO RETURN NORMALLY C S SLEEP,KSF /WAIT FOR CTRL/Q S JMP SLEEP /KEEP WAITING S KRB /READ CHARACTER S AND (0177 S TAD (-17 /IS IT A CTRL/O? S SNA /SKIP IF NOT S JMP RTTYC /YES, ABORT S TAD (-2 /TEST FOR CTRL/Q (-17-2=-21 OCTAL) S SZA CLA /SKIP IF SO S JMP SLEEP /NOPE, KEEP SLEEPING C S NORMAL,INC TTYCTL /INCREMENT RETURN ADDRESS FOR NORMAL RETURN S CLA /SAFETY VALVE S JMP RTTYC /RETURN END