Anda di halaman 1dari 61

*******************************************************************************

* SOURCE CODE and DOCUMENTATION COPYRIGHT (C) 1987-89 KEVIN G. RHOADS AND THE*
* HIGH VOLTAGE RESEARCH LAB., L.E.E.S, Massachusetts Institute of Technology *
*******************************************************************************
*******************************************************************************
*
*
* This file is part of the GRAPHICS.LIB library, the other library components *
* are in files: MULTI.FOR, PLOT.FOR, XGRAPH.FOR & GRPRIM.FOR. This library *
* uses routines from the UTILS.LIB and ASMUTILS.LIB libraries and should be *
* listed before them at link time. In particular, routines used from outside *
* this library are primarily concentrated in SUTIL.FOR.
*
*-----------------------------------------------------------------------------*
$SEGMENT XGRAPH
*compiler is directed to place object code in segment XGRAPH
*
*-----------------------------------------------------------------------------*
$CHAREQU
*compiler is directed NOT to barf on CHARACTER and numeric data types mixed in*
*same COMMON BLOCK or EQUIVALENCE
*
*******************************************************************************
*LIST OF ENTRY POINTS
*
*
*
*
INTEGER*4 FUNCTION GEWAIT(IT,LLX,LLY)
*
*
*
* GEWAIT accepts keyboard input and executes commands while a grey scale image*
* reconstruction is displayed on screen. Any extensions, or fixes, to the
*
* command processing for on screen images must be made to GEWAIT and the
*
* subroutines it calls. GEWAIT is arranged as a function so that it can easily
* return status codes.
*
*=============================================================================*
*SEGMENT X_GRAPH
*
*
INTEGER*4 FUNCTION G3WAIT(IT,LLX,LLY)
*
* G3WAIT is overflow from GEWAIT, needed due to compiler/linker limitation. *
*=============================================================================*
*SEGMENT _XGRAPH
*
*
SUBROUTINE PARPLX(A256,LLX,LLY)
*
*
ENTRY PARPNX(A256,LLX,LLY)
*
*
ENTRY BARPLX(A256,LLX,LLY)
*
* These routines handle the plotting of horizontal slices through an on screen*
* image and can be used to plot from integer*2 arrays or frames.
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE PARPLY(A256,LLX,LLY)
*
*
ENTRY PARPNY(A256,LLX,LLY)
*
*
ENTRY PARPRY(A256,LLX,LLY)
*
*
ENTRY PARPOY(A256,LLX,LLY)
*
*
ENTRY BARPNY(A256,LLX,LLY)
*
*
ENTRY BARPLY(A256,LLX,LLY)
*
* These routines handle the plotting of vertical slices through an on screen *
* image and can be used to plot from integer*2 arrays or frames.
*
*=============================================================================*
*SEGMENT _XGRAPH_
*
*
SUBROUTINE NORM2L(II256,LX,LY)
*
* II256 is an INTEGER*4 pointer to the actual data array.
*
* Fills the two normalization arrays, and determines the absolute limits of the
* data (BIG2 and SMALL2); next the IGNOR specifier is used to determine how *
* many points to ignore on either end in determining the BIG and SMALL limits.*
* This routine dereferences II256 and calls N0RML2.
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE NORML2(A256,LX,LY)
*
* A256 is the actual data array.
*
* Fills the two normalization arrays, and determines the absolute limits of the

* data (BIG2 and SMALL2); next the IGNOR specifier is used to determine how *
* many points to ignore on either end in determining the BIG and SMALL limits.*
* This routine calls N0RML2 then RN0RML.
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE NNRML2(A256,LX,LY)
*
*
ENTRY N0RML2(A256,LX,LY)
*
* A256 is the actual data array.
*
* Fills the two normalization arrays, and determines the absolute limits of the
* data (BIG2 and SMALL2); next the IGNOR specifier is used to determine how *
* many points to ignore on either end in determining the BIG and SMALL limits.*
*
*
* There is some weirdo bug that I can't wipe out. BIG and SMALL do not get *
* proper values. Call RN0RML immediately upon return and they get set right. *
* This was the original NORML2 but was renamed and the new version generated *
* as above to cope with this annoying bug.
*
*
*
* RNORML and RN0RML use the already filled normalization arrays and recalculate
* only BIG and SMALL; RN0RML uses IGNOR, RNORML uses IGN2.
*
*
ENTRY RN0RML(LX,LY)
*
*
ENTRY RNORML(IGN2,LX,LY)
*
*=============================================================================*
*SEGMENT %_LPLOT_
*
*
SUBROUTINE PLTHLP
*
*
ENTRY PLOTHP
*
* Generates series of help screens for GEWAIT. These routines should be
*
* updated whenever GEWAIT is seriously extended. The final screen is a quick *
* summary screen, and only it is generated if PLOTHP is called.
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE CONV12(IARR1,IARR2,IX,IY)
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE CONV42(IARR4,IARR2,IX,IY)
*
**----------------------------------------------------------------------------*
**
SUBROUTINE CONVR2(ARR4,IARR2,IX,IY)
*
**
ENTRY CNVR2(ARR4,IARR2,IX,IY)
*
**----------------------------------------------------------------------------*
**
INTEGER*4 FUNCTION BLKDSR(ARRAY,IX,IY)
*
**
ENTRY BLKRDS(ARRAY,IX,IY)
*
**
ENTRY BKRDS(ARRAY,IX,IY)
*
**
ENTRY BKDSR(ARRAY,IX,IY)
*
*-----------------------------------------------------------------------------*
*
INTEGER*4 FUNCTION BLKDS1(ARRAY,IX,IY)
*
*
ENTRY BLK1DS(ARRAY,IX,IY)
*
*-----------------------------------------------------------------------------*
*
INTEGER*4 FUNCTION BLKDS4(ARRAY,IX,IY)
*
*
ENTRY BLK4DS(ARRAY,IX,IY)
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE PARPL4(ARRAY,IX,IY)
*
**----------------------------------------------------------------------------*
**
SUBROUTINE PARPL1(ARRAY,IX,IY)
*
*-----------------------------------------------------------------------------*
*
INTEGER*4 FUNCTION BSERCH(CUMUL,VALUE)
*
*
ENTRY BHSRCH(CUMUL,VALUE)
*
*
ENTRY BLSRCH(CUMUL,VALUE)
*
*-----------------------------------------------------------------------------*
*
INTEGER*4 FUNCTION IWHBUF(BUFFER)
*
*-----------------------------------------------------------------------------*
*
SUBROUTINE SUPRES(ARRAY,X,Y,X1,X2,Y1,Y2,FILL)
*
*******************************************************************************
*---------------------------------------------------------------------INTEGER*4 FUNCTION GEWAIT(IT,LLX,LLY)

CHARACTER*78 SCMESS
CHARACTER*24 FNAME,FNAME2,FRMTYP(-2:20)*22,MESSV*40,MESSV2*60,MESSP*12
CHARACTER*8 HAPS(32)
CHARACTER*1 TC,TCALGN(2),MGFRMN(2)
REAL*4 R500(16384),BASVAL,BASLOG,GETRL,CHGVLT,TINCR
REAL*4 DATA(3,1024),D256L(3,1024),D128L(3,512),D75L(3,300),D64L(3,256)
REAL*4 PR256L(3,256,4),PR128L(3,128,4),PR75L(3,75,4),PR64L(3,64,4)
REAL*4 PR50L(3,50,4),D50L(3,200),D500(500,40),D250(250,80),D125(125,160)
REAL*4 PLOT1K(1024,2,10),PLT512(512,2,20),PLT256(256,2,40),D128(128,160)
REAL*4 D170(170,120),D20480(20480)
INTEGER*4 ERROR,RECLEN,FREC
INTEGER*4 DISP,USEP,DSPAGE,GRPAGE,XMAX,YMAX,OTHER,PICPAG,GRPHPG,IZRO,I
INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,MODE,IGNORE,TYPFRM
INTEGER*4 XNUM,YNUM,XLIST(36),YLIST(36),CUMUL(0:16383),NFRAME,NDRIVE
INTEGER*4 IWHERE,IWHERR,KADDR,BIGSAV,SMLSAV,IXL,IYL,GETINT,IWH,ONE
INTEGER*4 XLIM,YLIM,HILO,MAG,LLX,LLY,PLTRMN,PLTRMX,PLTDMN,PLTDMX,CONVAR(0:
7)
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,APSCR1,APSCR2,APSCR3
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,AFMTYP,SCRMRK,APS(0:7)
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,LNS(0:7),IAPS(32),LENS(32)
INTEGER*4 L,B,RR,T,FQUERY,FCALL2,LLCTRD,RLCTRD,BLCTRD,TLCTRD,G3WAIT
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
INTEGER*2 TAGS(80,4),FRAMTG(80),TYPTAG(80),WHERTG(80),NPNTAG(80)
INTEGER*2 PROFIL(0:16383),BIG,SMALL,RANGE,BIG2,SMALL2,I16384,DEFBUF
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,QR(16382),R(11),ISOBAS,ISOTOL
INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP,VCNTRL,HCNTRL,VCTRLN,HCTRLN
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,IT(LLX,LLY)
INTEGER*2 PATH1X,PATH1Y,PATH2X,PATH2Y,PATH3X,PATH3Y
INTEGER*2 PATH(2,6),PATH4X,PATH4Y,PATH5X,PATH5Y,PATH6X,PATH6Y
LOGICAL*4 REPEAT,FLAG,CRSDSP,FLAG2,FCKD,SKIPIT,NOT14,KILLIT,EXISTS
LOGICAL*2 ABORT,ESCAPE,INTRPT,INITYT,NOSAV,ZVALID,AVALID,ZZCORR,AACORR
LOGICAL*2 RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,MULTI,FANCY,M2,M3
LOGICAL*2 PAUSE,SPAUSE,CONFRM,SCNFRM,ONPIC,XFLAG,FL2,YFLAG,BLCTOK,TLCTOK
LOGICAL*2 BUFGUD(32),BUFUSE(32),USEWIN,WINUSE,NQUIET,ISTEST,CNVDBG
LOGICAL*2 MGLR,MGUD,MGOTHR,MGOK,PTHDUN
LOGICAL*1 FGOOD,FSCRN,BIGSML,FOO,BAR
LOGICAL*1 DISK,END,PARAM,FUBAR
EQUIVALENCE (R500(1),QR(1)),(ITKILL,KILLIT),(INOT14,NOT14)
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC),(MESSV,MESSV2)
EQUIVALENCE (APS(0),APMAIN),(APS(1),AP1),(APS(2),AP2),(APS(3),AP3)
EQUIVALENCE (APS(4),AP4),(APS(5),AP5),(APS(6),APZR),(APS(7),APMX)
EQUIVALENCE (LNS(0),LNMAIN),(LNS(1),LN1),(LNS(2),LN2),(LNS(3),LN3)
EQUIVALENCE (LNS(4),LN4),(LNS(5),LN5),(LNS(6),LNZR),(LNS(7),LNMX)
EQUIVALENCE (IA,IAPS(1)),(IA2,IAPS(2)),(IA4,IAPS(3)),(IZ,IZR,IAPS(4))
EQUIVALENCE (IMX,IAPS(5)),(IIT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (DATA(1,1),D256L(1,1),D128L(1,1),D75L(1,1),D64L(1,1),D50L(1,1)
)
EQUIVALENCE
1),PR50L(1,1,1))
EQUIVALENCE
)
EQUIVALENCE
EQUIVALENCE
1))
EQUIVALENCE
EQUIVALENCE
EQUIVALENCE
EQUIVALENCE

(DATA(1,1),PR256L(1,1,1),PR128L(1,1,1),PR75L(1,1,1),PR64L(1,1,
(DATA(1,1),PLOT1K(1,1,1),PLT512(1,1,1),PLT256(1,1,1),D170(1,1)
(DATA(1,1),D500(1,1),D250(1,1),D125(1,1),D128(1,1),D20480(1))
(TAGS(1,1),FRAMTG(1)),(TAGS(1,2),TYPTAG(1)),(TAGS(1,3),WHERTG(
(TAGS(1,4),NPNTAG(1)),(VCNTRL,VCTRLN),(HCNTRL,HCTRLN)
(PATH(1,1),PATH1X),(PATH(2,1),PATH1Y)
(PATH(1,2),PATH2X),(PATH(2,2),PATH2Y)
(PATH(1,3),PATH3X),(PATH(2,3),PATH3Y)

EQUIVALENCE (PATH(1,4),PATH4X),(PATH(2,4),PATH4Y)
EQUIVALENCE (PATH(1,5),PATH5X),(PATH(2,5),PATH5Y)
EQUIVALENCE (PATH(1,6),PATH6X),(PATH(2,6),PATH6Y)
COMMON /MGFRAM/MGFRMN,MGLR,MGUD,MGOTHR,MGOK,/MGPATH/PATH,PTHDUN
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/SCALEM/SCMESS
COMMON /BLKLIM/XLIM,YLIM,/BLKCNV/MAG,HILO,CONTRS,BRIGHT,BASLOG
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT,BASVAL
COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,/TST/ISTEST
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/PARPLZ/R500,/DEBUGC/CNVDBG
COMMON /PARMLT/XNUM,YNUM,XLIST,YLIST,/CONVGR/R,/OMADSK/NDRIVE,NFRAME
COMMON /PARCUM/IGNORE,PROFIL,CUMUL,/ISOCM3/ISOBAS,ISOTOL
COMMON /TWOPAR/PICPAG,GRPHPG,/CONVQ2/IWHERE,IWHERR,/PLTMLT/MULTI,FANCY,M2,
M3
COMMON
COMMON
COMMON
COMMON
COMMON

/PLOTSZ/PLTRMN,PLTRMX,PLTDMN,PLTDMX,/BUFDEF/DEFBUF
/PARNML/BIG,SMALL,RANGE,/XFRAME/TYPFRM,FRMTYP
/PARNM2/BIG2,SMALL2,MODE,I16384,/IPPENC/SKIPIT,/PARB14/NOT14,KILLIT
/PAWS/PAUSE,/CNFRM/CONFRM,/OMABFL/BUFGUD,BUFUSE
/OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR

NSN
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/WIN/USEWIN,L,B,RR,T
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/TST170/NQUIET
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,CHGVLT,TINCR,
&FREC,RECLEN,TENCPI,SXTNCP,/WFMOUT/DATA,/WFMTAG/TAGS
COMMON /FETURE/LLCTRD,RLCTRD,BLCTRD,TLCTRD,VCNTRL,HCNTRL,BLCTOK,TLCTOK
SAVE /SHFSTA/,/KEYGET/,/NTRVN/,/PAWS/,/CONFRM/,/CONVGR/,INITYT,NOSAV
SAVE /PARCUM/,/PARNML/,/PARNM2/,/IPPENC/,/PARB14/,/ISOCM3/,/PLOTSZ/,/WIN/
SAVE /BLKLIM/,/BLKCNV/,/GEWRTN/,/PARMLT/,/PARPLZ/,/CONVQ2/,/XFRAME/,/OMABF
L/
SAVE /OMABFR/,/OMACNT/,/OMATYP/,/ZEROS/,/OMASCR/,/AMPLS/,/OMADSK/,/BUFDEF/
SAVE /PLTMLT/,/SCALEM/,/NQUIET/,/GARBAG/,/WFMOUT/,/WFMTAG/,/TST/,/DEBUGC/
SAVE /FETURE/,/MGFRAM/,/MGPATH/
SAVE IGN2,IGNOR,WINUSE
EXTERNAL BLKDS,PARPL,CALL3,PLISO,PLIS0,STOFRM,CLS,CRCLS,GCRCLS,SAYATQ
EXTERNAL DIRDIR,CJMPTO,PLTHLP,PLOTHP,MED3,MED3X,MED3Y,MED3L,MED3R,MED3D
EXTERNAL KADDR,GETINT,GETRL,FQUERY,CALL2,PACONT,FCALL2,OMAZRO,SUPRES
EXTERNAL PACOMM,PASCRL,PACTLX,PAKPDX,NUMLOF
SAVE
DATA INITYT/.FALSE./,NOSAV/.FALSE./
*
IF (.NOT.INITYT) THEN
INITYT = .TRUE.
PICPAG = 1
GRPHPG = 0
R(11) = 1
IGNORE = 110
IF (BASLOG.LT.-30.0.OR.BASLOG.GT.30.0) BASLOG = 1.0
IF (BASVAL.LE.0.0.OR.BASVAL.GE.1000.0) BASVAL = 2.0**BASLOG
FANCY = .FALSE.
MULTI = .FALSE.
CALL NSTMSK(.FALSE.)
CALL NSTFX0(.TRUE.)
MAG = 17
ENDIF
CALL NUMLOF
MAG = NMAG
SCMESS = ' '
IF (.NOT.NOSAV) THEN
SAVBAS = BASVAL
SAVLOG = BASLOG

ENDIF
WINUSE = .FALSE.
*
CALL FRESET
PICPAG = 1
GRPHPG = 0
IF (R(11).NE.0.AND.R(11).NE.1) R(11) = 1
IGNOR = IGNORE
IGN2 = IGNOR
BSLG = BASLOG
BSVL = BASVAL
BRGHT = BRIGHT
CNTRS = CONTRS
NQUIET = LLY.LT.130
CALL LEDSON
PLTRMN = 0
PLTRMX = 0
PLTDMN = 0
PLTDMX = 0
XNUM = 0
YNUM = 0
XMAX = XOP + XART - 1
YMAX = YOP + YART - 1
USEP = GRPAGE()
DISP = DSPAGE()
IF (DISP.NE.USEP) THEN
CALL SETPG1
DISP = 1
USEP = 1
ENDIF
OTHER = 1 - DISP
CALL PXLXOR
IF (XLOC.NE.0.OR.YLOC.NE.0) THEN
CALL USEPG(PICPAG)
CALL PARMKL
CALL USEPG(DISP)
ENDIF
CRSDSP = YLIM .LT. 416
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
CALL SHIFTS
IF (NUML) CALL NUMLOF
9000 CALL ISNTRP
CALL SHIFTS
9002 BIGSML = .FALSE.
CALL FILLWD($FFFF)
IF ((PICPAG.LT.0.OR.PICPAG.GT.1).OR.(GRPHPG.LT.0.OR.GRPHPG.GT.1)) THEN
PICPAG = 1
GRPHPG = 0
ENDIF
IPIC = DSPAGE()
ONPIC = IPIC.EQ.PICPAG
IF (IERR.NE.0) GOTO 9000
IF (ABORT) THEN
CALL SETPG0
CALL PXLSET
CALL GRCLS
CALL CAPSON
STOP
ENDIF
IF (INTRPT.OR.ESCAPE) THEN
GOTO 9994

ENDIF
9001 CONTINUE
IF (USEWIN.AND..NOT.WINUSE) THEN
USEWIN = .FALSE.
L = 0
B = 0
RR = 767
T = 479
ELSE
CALL SETWIN(0,0,767,479)
CALL SMPMOD(0)
ENDIF
IF (FANCY.AND.MULTI) THEN
CALL FRESET
MULTI = .FALSE.
*
I = FQUERY()
MESSP = 'Fancy'
*
WRITE (MESSP,'(''Fancy '',I2.2)') I
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ENDIF
IF (FANCY.AND.(MESSP(1:2).NE.'Fa')) THEN
MULTI = .FALSE.
*
I = FQUERY()
MESSP = 'Fancy'
*
WRITE (MESSP,'(''Fancy '',I2.2)') I
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF (MULTI.AND.(MESSP(1:2).NE.'Mu')) THEN
MESSP = 'Multi'
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF ((WINUSE.OR.USEWIN).AND.(MESSP(1:1).EQ.'F'.OR.MESSP(1:1).EQ.'M')) T
HEN
MESSP = 'Windows'
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF (MESSP(1:2).NE.'Fu'.AND..NOT.(FANCY.OR.MULTI.OR.USEWIN.OR.WINUSE))
THEN
MESSP = 'FullSc'
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
MULTI = .FALSE.
FANCY = .FALSE.
ENDIF
*
* Beginning of command interpreter loop ....
*
IF (SCRL.AND.CTRL.AND.ASC.EQ.0.AND.SCAN.EQ.$12) THEN
CALL CJMPTO($0E000)
ELSEIF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.120)) THEN
I = G3WAIT(IT,LLX,LLY)
GOTO 6667
ELSEIF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.$32)) THEN
I = G3WAIT(IT,LLX,LLY)
GOTO 6667
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.35.AND.CTRL) THEN
I = G3WAIT(IT,LLX,LLY)
BIGSML = .TRUE.
GOTO 6666
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.47.AND.CTRL) THEN
I = G3WAIT(IT,LLX,LLY)
BIGSML = .TRUE.
GOTO 6666
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.120) THEN

FOO = CAPS
BAR = NUML
CALL SETPG0
I = DEFBUF
CALL CND81T(I)
PRINT *,'Conditional replacement done.'
FNRNSN(DEFBUF) = - ABS(FNRNSN(DEFBUF))
GOTO 6667
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.122) THEN
FOO = CAPS
BAR = NUML
CALL SETPG0
I = DEFBUF
CALL C2D81T(I)
PRINT *,'BI-Conditional replacement done.'
FNRNSN(DEFBUF) = - ABS(FNRNSN(DEFBUF))
GOTO 6667
ELSEIF ((ASC.EQ.0.AND.SCAN.EQ.126).OR.(TC.EQ.'7'.AND.SCRL.AND.(.NOT.NUML))
) THEN
FOO = .FALSE.
BAR = .FALSE.
I = G3WAIT(IT,LLX,LLY)
IF (I.EQ.9000) GOTO 9000
GOTO 6667
ELSEIF ((ASC.EQ.0.AND.SCAN.EQ.127).OR. (TC.EQ.'8'.AND.SCRL.AND.(.NOT.NUML)
)) THEN
FOO = .FALSE.
BAR = .FALSE.
I = G3WAIT(IT,LLX,LLY)
IF (I.EQ.9000) GOTO 9000
GOTO 6667
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.131) THEN
I = G3WAIT(IT,LLX,LLY)
ELSEIF (ASC.EQ.8.AND.SCAN.EQ.$23) THEN
FANCY = .FALSE.
MULTI = .FALSE.
PAUSE = .TRUE.
CALL ISNTRP
PAUSE = .FALSE.
I = ASC - $30
IF (I.LT.0.OR.I.GT.17) I = ASC - 55
IF (I.LT.0.OR.I.GT.17) I = ASC - 87
IF (I.EQ.17.OR.I.EQ.0) THEN
WINUSE = .FALSE.
MULTI = .TRUE.
MESSP = 'Multi'
ELSEIF (I.GE.1.AND.I.LE.16) THEN
WINUSE = .TRUE.
CALL HEXN0X(I)
WRITE (MESSP,'(''Sixteenth'',I2)') I
ELSE
WINUSE = .FALSE.
MESSP = 'FullSc'
ENDIF
CALL USEPG(PICPAG)
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF (TC.EQ.'S'.AND.(LSH.OR.RSH)) THEN
I = G3WAIT(IT,LLX,LLY)
ELSEIF (TC.EQ.'C'.AND.(LSH.OR.RSH)) THEN
I = G3WAIT(IT,LLX,LLY)

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

ELSEIF (TC.EQ.'F'.AND.(LSH.OR.RSH).OR.(ASC.EQ.6.AND..NOT.SCRL)) THEN


FANCY = .TRUE.
MULTI = .FALSE.
WINUSE = .FALSE.
USEWIN = .FALSE.
MESSP = 'Fancy '
IF (ASC.EQ.6) THEN
PAUSE = .TRUE.
CALL ISNTRP
PAUSE = .FALSE.
CALL FRESET
I = MOD(ASC,2)
IF (SCAN.EQ.$20) THEN
CALL FSET11
MESSP = 'Fancy 11'
ELSEIF (SCAN.EQ.$21) THEN
CALL FSET15
MESSP = 'Fancy 15'
ELSEIF (ASC.GE.$30.AND.ASC.LE.$39.AND.I.EQ.1) THEN
CALL FSETON
MESSP = 'Fancy 05'
ENDIF
ENDIF
CALL USEPG(PICPAG)
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF ((TC.EQ.'Q'.AND.(LSH.OR.RSH)).OR.ASC.EQ.17) THEN
FANCY = .FALSE.
IF (TC.EQ.'Q') THEN
CALL SETPG0
CALL GCRCLS
PRINT *,' '
PRINT *,'PLOT WINDOW=? 1 2 '
PRINT *,'
3 4 '
PRINT *,' FULL SCREEN -- 5 '
PRINT *,' multi-window 6 '
PRINT *,' multi-plot
7 '
PRINT *,' many plot
8 '
I = MENU(5,0,8)
ELSE
PAUSE = .TRUE.
CALL ISNTRP
PAUSE = .FALSE.
I = ASC - $30
ENDIF
M2 = .FALSE.
M3 = .FALSE.
IF (I.EQ.6.OR.I.EQ.0.OR.I.EQ.7.OR.I.EQ.8) THEN
WINUSE = .FALSE.
MULTI = .TRUE.
M2 = I.EQ.7
M3 = I.EQ.8
MESSP = 'Multi'
ELSEIF (I.GE.1.AND.I.LE.4) THEN
WINUSE = .TRUE.
MULTI = .FALSE.
CALL XXQUAD(I)
WRITE (MESSP,'(''Quadrant '',I2)') I
ELSE
WINUSE = .FALSE.
MULTI = .FALSE.

MESSP = 'FullSc'
ENDIF
CALL USEPG(PICPAG)
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF ((TC.EQ.'N'.AND.(LSH.OR.RSH)).OR.ASC.EQ.14) THEN
FANCY = .FALSE.
IF (TC.EQ.'N') THEN
CALL SETPG0
CALL GCRCLS
PRINT *,' '
PRINT *,'PLOT WINDOW=? 1 2 3 '
PRINT *,'
4 5 6 '
PRINT *,'
7 8 9 '
PRINT *,' FULL SCREEN -- 10 '
PRINT *,' multi-window 11 '
PRINT *,' multi-plot
12 '
PRINT *,' many plot
13 '
I = MENU(10,0,13)
ELSE
PAUSE = .TRUE.
CALL ISNTRP
PAUSE = .FALSE.
I = ASC - $30
ENDIF
M2 = .FALSE.
M3 = .FALSE.
IF (I.EQ.11.OR.I.EQ.0.OR.I.EQ.12.OR.I.EQ.13) THEN
WINUSE = .FALSE.
MULTI = .TRUE.
M2 = I.EQ.12
M3 = I.EQ.13
MESSP = 'Multi'
ELSEIF (I.GE.1.AND.I.LE.9) THEN
WINUSE = .TRUE.
MULTI = .FALSE.
CALL NONMGX(I)
WRITE (MESSP,'(''Ninth '',I2)') I
ELSE
WINUSE = .FALSE.
MULTI = .FALSE.
MESSP = 'FullSc'
ENDIF
CALL USEPG(PICPAG)
IF (NQUIET) CALL SAYATQ(13,2,30,MESSP)
ELSEIF (ONPIC.AND.ASC.EQ.0.AND.SCAN.EQ.$1F.AND.CTRL) THEN
IF (XNUM.GT.2.OR.YNUM.GT.2.OR.(XNUM+YNUM).LT.2) THEN
SCRL = .FALSE.
NUML = .FALSE.
SCAN = $12
GOTO 9001
ENDIF
IF (XNUM.EQ.2) THEN
I1 = XLIST(1)
I2 = XLIST(2)
ELSE
I1 = XLIST(1)
I2 = XLOC
IF (I2.EQ.0) I2 = I1
ENDIF
IF (YNUM.EQ.2) THEN

J1 = YLIST(1)
J2 = YLIST(2)
ELSE
J1 = YLIST(1)
J2 = YLOC
IF (J2.EQ.0) J2 = J1
ENDIF
IF (SCRL) THEN
CALL SUPRES(IT,LLX,LLY,I1,I2,J1,J2,1)
ELSEIF (LSH.AND.RSH) THEN
WRITE (13,*) '
'
WRITE (13,*) ' VALUE? '
WRITE (13,*) '
'
I = GETINT()
CALL SUPRES(IT,LLX,LLY,I1,I2,J1,J2,I)
ELSE
CALL SUPRES(IT,LLX,LLY,I1,I2,J1,J2,0)
ENDIF
IF (.NOT.NUML) THEN
CALL GRCLS
WRITE (13,*) ' REDISPLAY '
GOTO 6667
ENDIF
NUML = .FALSE.
SCRL = .FALSE.
SCAN = $12
GOTO 9001
ELSEIF (ONPIC.AND.ASC.EQ.0.AND.SCAN.EQ.$21.AND.CTRL) THEN
IF (XNUM.GT.2.OR.YNUM.GT.2.OR.(XNUM+YNUM).LT.2) THEN
CALL DSPSWP
PRINT *,' Must have TWO EACH vertical and horizontal markers.'
ELSE
IF (XNUM.EQ.2) THEN
I1 = XLIST(1)
I2 = XLIST(2)
ELSE
I1 = XLIST(1)
I2 = XLOC
IF (I2.EQ.0) I2 = I1
ENDIF
IF (YNUM.EQ.2) THEN
J1 = YLIST(1)
J2 = YLIST(2)
ELSE
J1 = YLIST(1)
J2 = YLOC
IF (J2.EQ.0) J2 = J1
ENDIF
WRITE (13,*) '
'
WRITE (13,*) ' VALUE? '
WRITE (13,*) '
'
I = GETINT()
CALL SUPRES(IT,LLX,LLY,I1,I2,J1,J2,I)
IF (NUML) THEN
CALL GRCLS
WRITE (13,*) ' REDISPLAY '
GOTO 6667
ENDIF
NUML = .FALSE.
SCRL = .FALSE.

SCAN = $12
GOTO 9001
ENDIF
ELSEIF (SCRL.AND.(ASC.EQ.18.OR.ASC.EQ.19.OR.(ASC.EQ.0.AND.(SCAN.EQ.$1F.OR.
SCAN.EQ.$13)))) THEN
IF (SCAN.EQ.$1F) THEN
CALL PARSTO
ELSEIF (ASC.EQ.18) THEN
CALL PARRUN
ELSE
CALL PARR2D
ENDIF
ELSEIF (ONPIC.AND.ASC.EQ.0.AND.(SCAN.EQ.$26.OR.SCAN.EQ.$32).AND.(XLOC.NE.0
.OR.YLOC.NE.0)) THEN
IF (XLOC.NE.0.AND.XNUM.LT.36) THEN
XNUM = XNUM + 1
XLIST(XNUM) = XLOC
XLOC = (1+LLX)/2
CALL PARMKL
ELSEIF (YLOC.NE.0.AND.YNUM.LT.36) THEN
YNUM = YNUM + 1
YLIST(YNUM) = YLOC
YLOC = (1+LLY)/2
CALL PARMKL
ENDIF
ELSEIF (((ASC.EQ.0.AND.(SCAN.EQ.$16.OR.SCAN.EQ.$12)).OR.ASC.EQ.5.OR.
& (SCRL.AND.(TC.EQ.'E'.OR.TC.EQ.'e'))).AND.ONPIC) THEN
IF (SCAN.NE.$16) THEN
CALL PARMKL
XLOC = -1
YLOC = -1
ENDIF
IXS = XLOC
IYS = YLOC
XLOC = 0
DO 8000 I = 1,YNUM
YLOC = YLIST(I)
CALL PARMKL
8000
CONTINUE
YNUM = 0
YLOC = 0
DO 8001 I = 1,XNUM
XLOC = XLIST(I)
CALL PARMKL
8001
CONTINUE
IF (CRSDSP) CALL CLLINE(3,13)
XNUM = 0
XLOC = IXS
YLOC = IYS
*
ELSEIF ((SCAN.EQ.72.OR.SCAN.EQ.77.OR.SCAN.EQ.116).AND.(ONPIC.OR.SCRL)) TH
EN
ELSEIF ( ((SCAN.EQ.72.OR.SCAN.EQ.77.OR.SCAN.EQ.116).AND.(ONPIC.OR.SCRL))
&
.OR. ((ASC.EQ.6.OR.ASC.EQ.8).AND.ONPIC) ) THEN
CALL USEPG(PICPAG)
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
IF (XLOC.NE.0) THEN
XLOC = XLOC + 1
IF (LSH.OR.RSH) XLOC = XLOC + 3
IF (SCRL.OR.(LSH.AND.RSH)) XLOC = XLOC + 7
IF (SCRL.AND.(LSH.OR.RSH)) XLOC = XLOC + 3

IF (SCRL.AND.LSH.AND.RSH) XLOC = XLOC + 7


IF (XLOC.GT.LLX) XLOC = MOD(XLOC,LLX)
ELSE
YLOC = YLOC + 1
IF (LSH.OR.RSH) YLOC = YLOC + 3
IF (SCRL.OR.(LSH.AND.RSH)) YLOC = YLOC + 7
IF (SCRL.AND.(LSH.OR.RSH)) YLOC = YLOC + 3
IF (SCRL.AND.LSH.AND.RSH) YLOC = YLOC + 7
IF (YLOC.GT.LLY) YLOC = MOD(YLOC,LLY)
ENDIF
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
CALL USEPG(DISP)
ELSEIF ((SCAN.EQ.75.OR.SCAN.EQ.114.OR.SCAN.EQ.80).AND.(ONPIC.OR.SCRL)) TH

*
EN

ELSEIF ( ((SCAN.EQ.75.OR.SCAN.EQ.114.OR.SCAN.EQ.80).AND.(ONPIC.OR.SCRL))
.OR. ((ASC.EQ.2.OR.ASC.EQ.4).AND.ONPIC) ) THEN
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
IF (XLOC.NE.0) THEN
XLOC = XLOC - 1
IF (LSH.OR.RSH) XLOC = XLOC - 3
IF (SCRL.OR.(LSH.AND.RSH)) XLOC = XLOC - 7
IF (SCRL.AND.(LSH.OR.RSH)) XLOC = XLOC - 3
IF (SCRL.AND.LSH.AND.RSH) XLOC = XLOC - 7
IF (XLOC.LT.0) XLOC = LLX + XLOC
ELSE
YLOC = YLOC - 1
IF (LSH.OR.RSH) YLOC = YLOC - 3
IF (SCRL.OR.(LSH.AND.RSH)) YLOC = YLOC - 7
IF (SCRL.AND.(LSH.OR.RSH)) YLOC = YLOC - 3
IF (SCRL.AND.LSH.AND.RSH) YLOC = YLOC - 7
IF (YLOC.LT.0) YLOC = LLY + YLOC
ENDIF
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
CALL USEPG(DISP)
ELSEIF (SCRL.AND.(TC.EQ.'X'.OR.TC.EQ.'x')) THEN
CALL SETPG0
CALL GCRCLS
PRINT *,'Extract to which slice(s)?'
READ (*,'(BN,I3)',ERR=1289) I
IF (I.GT.0.AND.I.LT.81) THEN
IF (YLOC.EQ.0) YLOC = (1+LLY)/2
IF (LLX.EQ.500) THEN
DO 1288 J = 1,500
D500(J,I) = IT(J,YLOC)
DO 1286 K = 1,YNUM
D500(J,I+K) = IT(J,YLIST(K))
CONTINUE
CONTINUE
ELSE
DO 1287 J = 1,LLX
D250(J,I) = IT(J,YLOC)
DO 1285 K = 1,YNUM
D250(J,I+K) = IT(J,YLIST(K))
CONTINUE
CONTINUE
ENDIF
WHERTG(I) = YLOC
NPNTAG(I) = LLX
TYPTAG(I) = TYPS(DEFBUF)
FRAMTG(I) = FNRNSN(DEFBUF)

&

1289

1286
1288

1285
1287

DO 1284 K = 1,YNUM
WHERTG(I+K) = YLIST(K)
NPNTAG(I+K) = LLX
TYPTAG(I+K) = TYPTAG(I)
FRAMTG(I+K) = FRAMTG(I)
1284
CONTINUE
ENDIF
ELSEIF (SCRL.AND.(TC.EQ.'D'.OR.TC.EQ.'d'.OR.ASC.EQ.6.OR.
& (ASC.EQ.0.AND.SCAN.EQ.$21))) THEN
IISC = SCAN
CALL SETPG(GRPHPG)
CALL GCRCLS
PRINT *,' Check directory of what drive? (0..8, 9=Default Drive)'
IDR = MENU(0,-1,9)
IF (IDR.EQ.9) IDR = -1
IF (IISC.EQ.$21) THEN
FNAME = '@???@###DAT'
ELSE
PRINT *,'FILE TYPE? (use ? or * wildcards as for DIR command)'
PRINT *,'
(@ = any alpha, # = any digit)'
READ (*,'(A)') FNAME
ENDIF
CALL DIRDIR(IDR,FNAME,'
',0)
ELSEIF (ASC.EQ.20.OR.ASC.EQ.19) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS
PRINT *,' READY TO ISOTRACE; SPECIFY TRACE LEVEL AND +/- TOLERANCE'
3398
PRINT *,' BASE VALUE FOR TRACE LINES = ? (',SMALL,' .. ',BIG,')'
*
READ (*,'(BN,I5)',ERR=3398) ISOBAS
ISOBAS = GETINT()
IF (ISOBAS.LT.0) GOTO 9000
IF (ISOBAS.LT.SMALL) ISOBAS = SMALL2
IF (ISOBAS.GT.BIG) ISOBAS = BIG2
IFOO = RANGE/10
IF (IFOO.EQ.0) THEN
ISOTOL = 1
GOTO 3400
ENDIF
3399
PRINT *,' TOLERANCE LEVEL = ? (>=1 & <=',IFOO,'[,- to skip])'
*
READ (*,'(BN,I5)',ERR=3399) ISOTOL
ISOTOL = GETINT()
IF (ISOTOL.LE.0) ISOTOL = 1
IF (ISOTOL.GT.IFOO) ISOTOL = IFOO
3400
CONTINUE
IF (NUML.OR.CAPS) THEN
CALL FLISO(IT,LLX,LLY)
ELSEIF (SCRL) THEN
CALL PLIS0(IT,LLX,LLY)
ELSE
CALL PLISO(IT,LLX,LLY)
ENDIF
ELSEIF (ASC.EQ.11.OR.(ASC.EQ.0.AND.SCAN.EQ.$25)) THEN
CALL SETPG0
CALL GCRCLS
PRINT *,' FILE TO DELETE? '
READ (*,'(A)') FNAME
CALL FNCHCK(FNAME,' ',FNAME2)
INQUIRE (FILE=FNAME2,EXIST=EXISTS)
IF (EXISTS) THEN
IF (ASC.EQ.11) THEN

IJ = DELETE(FNAME2)
ELSE
IJ = KILLFI(FNAME2)
ENDIF
ENDIF
IF (.NOT.EXISTS) THEN
PRINT *,' THEY AIN''T NO SECH AMINAL AS: ',FNAME2
ELSEIF (IJ.NE.0) THEN
PRINT *,' RETURN I/O ERROR STATUS = ',IJ
ELSE
PRINT *,' Have deleted ',FNAME2
ENDIF
ELSEIF ((ONPIC.OR.SCRL).AND.SCAN.EQ.$49) THEN
CALL USEPG(PICPAG)
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
IF (XLOC.NE.0) THEN
XLOC = XOP - 1
ELSE
YLOC = YOP - 1
ENDIF
CALL PARMKL
ELSEIF (SCAN.EQ.$51.AND.(ONPIC.OR.SCRL)) THEN
CALL USEPG(PICPAG)
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
IF (XLOC.NE.0) THEN
XLOC = XART
ELSE
YLOC = YART
ENDIF
CALL PARMKL
ELSEIF (SCAN.EQ.$4C.AND.ONPIC.AND.SCRL) THEN
CALL USEPG(PICPAG)
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
IF (XLOC.NE.0) THEN
XLOC = (1+LLX)/2
ELSE
YLOC = (1+LLY)/2
ENDIF
CALL PARMKL
ELSEIF ((SCRL.AND.(SCAN.EQ.$1E.OR.SCAN.EQ.$19)).OR.(ASC.EQ.0.AND.SCAN.EQ.$
19)) THEN
IF (YLOC.EQ.0.AND.XLOC.EQ.0) THEN
YLOC = (1+LLY)/2
CALL USEPG(PICPAG)
CALL PARMKL
ENDIF
CALL USEPG(GRPHPG)
IF (XLOC.NE.0.AND.YLOC.EQ.0) CALL PARPLY(IT,LLX,LLY)
IF (YLOC.NE.0.OR.XLOC.EQ.0) CALL PARPLX(IT,LLX,LLY)
CALL LEDSON
CALL DISPG(GRPHPG)
ELSEIF (TC.EQ.'%'.AND.SCRL) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS
IF (NUML.OR.INS.OR.CAPS) THEN
7703
PRINT *,' Intensity Range: BEGIN? (=> 0)'
*
READ (*,'(BN,I5)',ERR=7703) IB
IB = GETINT()
7704
PRINT *,' Intensity Range: END? (<=16383)'
*
READ (*,'(BN,I5)',ERR=7704) IE

IE = GETINT()
IF (IE.EQ.0) THEN
IE = 16383 - IB
ELSEIF (IE.LT.0) THEN
IE = 16383 + IE
ENDIF
CALL CRCLS
ELSE
IE = 16383
IB = 0
ENDIF
DO 2997 I = IE,IB,-4
PRINT 1998,I,PROFIL(I),I-1,PROFIL(I-1),I-2,PROFIL(I-2),I-3,PROFIL(
I-3)
CALL ISNTRP
IF (ERR.EQ.0.AND.(ABORT.OR.ESCAPE.OR.INTRPT.OR.ASC.EQ.14)) GOTO 29
99
2997
2999

CONTINUE
CONTINUE
ELSEIF (ASC.EQ.12.OR.(SCAN.EQ.$26.AND.(ASC.EQ.0.OR.SCRL))) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS
FNAME2 = ' '
7730
PRINT *,' List values to WHERE? (#PR, #SCRN0, file, blank to abort)'
FGOOD = .FALSE.
READ (*,'(A)',ERR=7730) FNAME
CALL STRIP(FNAME)
FSCRN = .FALSE.
IF (FNAME(1:1).EQ.'#') THEN
IF (FNAME(2:2).EQ.'P'.OR.FNAME(2:2).EQ.'p') THEN
FNAME2 = '#PR'
ELSE
FNAME2 = '#SCRN0'
FSCRN = .TRUE.
ENDIF
OPEN (UNIT=60,FILE=FNAME2,ERR=7730)
FGOOD = .TRUE.
ELSEIF (FNAME.NE.' '.AND.FNAME(1:1).NE.CHAR(13)) THEN
CALL FNCHCK(FNAME,'VAL',FNAME2)
OPEN (UNIT=60,FILE=FNAME2,STATUS='NEW',ERR=7730)
FGOOD = .TRUE.
ENDIF
IF (FGOOD) THEN
IF (XLOC.EQ.0.AND.YLOC.EQ.0) YLOC = (1+LLY)/2
IF (YLOC.NE.0) THEN
WRITE (60,*) ' Values along Y = ',YLOC
WRITE (60,'(/5(\''@X='',I3.3,2X,I5.5,2X))') (I,IT(I,YLOC),I=1,
LLX)
ELSE
WRITE (60,*) ' Values along X = ',XLOC
WRITE (60,'(/5(\''@Y='',I3.3,2X,I5.5,2X))') (I,IT(XLOC,I),I=1,
LLY)
ENDIF
CLOSE (UNIT=60,STATUS='KEEP',ERR=7731)
7731
CONTINUE
ENDIF
IF (.NOT.FSCRN) CALL PLOTHP
ELSEIF (TC.EQ.'{'.AND.SCRL) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS

7778
T]'

PRINT *,'STORE displayed frame as (0, 1-999; xxxyyy)? [INVALID TO ABOR

IF (NFRAME.LE.0) NFRAME = 1
PRINT *,' 0 => ',NFRAME + 1,' xxxyyy -> RUN xxx, SHOT yyy'
*
READ (*,'(BN,I8)',ERR=7778) I
I = GETINT()
IF (I.EQ.0) I = NFRAME + 1
IF (I.GT.999999.OR.I.LT.-999999) GOTO 9000
IF (I.GE.0) THEN
PRINT *,'STORE TO WHICH DRIVE? (-1, 0 .. 8) '
IDR = MENU(0,-1,9)
IF (NDRIVE.LT.0.OR.NDRIVE.GT.8) NDRIVE = -1
IF (ASC.EQ.13.AND.IDR.EQ.0) IDR = NDRIVE
J = I
CALL STAFRM(IT,LLX,LLY,TYPFRM,I,IDR)
IF (I.GT.0) THEN
PRINT *,' FRAME STORED SUCCESSFULLY '
NDRIVE = IDR
NFRAME = J
FNRNSN(DEFBUF) = J
ELSE
PRINT *,' ERROR CODE = ',I
ENDIF
CALL WAIT(1.5)
ENDIF
CALL PLOTHP
ELSEIF (TC.EQ.'"'.AND.SCRL) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS
7740
PRINT *,'STORE displayed frame as (0, 1-999; xxxyyy)? [INVALID TO ABOR
T]'
IF (NFRAME.LE.0) NFRAME = 1
PRINT *,' 0 => ',NFRAME + 1,' xxxyyy -> RUN xxx, SHOT yyy'
*
READ (*,'(BN,I8)',ERR=7740) I
I = GETINT()
IF (I.EQ.0) I = NFRAME + 1
IF (I.GT.999999.OR.I.LT.-999999) GOTO 9000
IF (I.GE.0) THEN
PRINT *,'STORE TO WHICH DRIVE? (-1, 0 .. 8) '
IDR = MENU(0,-1,9)
IF (NDRIVE.LT.0.OR.NDRIVE.GT.8) NDRIVE = -1
IF (ASC.EQ.13.AND.IDR.EQ.0) IDR = NDRIVE
J = I
CALL ST0FRM(IT,LLX,LLY,TYPFRM,I,IDR)
IF (I.GT.0) THEN
PRINT *,' FRAME STORED SUCCESSFULLY '
NDRIVE = IDR
NFRAME = J
FNRNSN(DEFBUF) = J
ELSE
PRINT *,' ERROR CODE = ',I
ENDIF
CALL WAIT(1.5)
ENDIF
CALL PLOTHP
ELSEIF (TC.EQ.'#'.AND.SCRL) THEN
CALL SETPG(GRPHPG)
CALL GCRCLS
IF (NUML.OR.INS.OR.CAPS) THEN
7705
PRINT *,' Intensity Range: BEGIN? (=> 0)'

READ (*,'(BN,I5)',ERR=7705) IB
IB = GETINT()
PRINT *,' Intensity Range: END? (<=16383)'
READ (*,'(BN,I5)',ERR=7706) IE
IE = GETINT()
IF (IE.EQ.0) THEN
IE = 16383 - IB
ELSEIF (IE.LT.0) THEN
IE = 16383 + IE
ENDIF
CALL CRCLS

7706
*

ELSE
IE = 16383
IB = 0
ENDIF
DO 1997 I = IB,IE,4
PRINT 1998,I,PROFIL(I),I+1,PROFIL(I+1),I+2,PROFIL(I+2),I+3,PROFIL(
I+3)
CALL ISNTRP
IF (ERR.EQ.0.AND.(ABORT.OR.ESCAPE.OR.INTRPT.OR.ASC.EQ.14)) GOTO 19
99
1997
1998

CONTINUE
FORMAT('I: ',I5,'-> ',I5,' I: ',I5,'-> ',I5,'
&
' I: ',I5,'-> ',I5)
1999
CONTINUE
ELSEIF (TC.EQ.'%'.OR.TC.EQ.'#'.OR.
& ((.NOT.SCRL).AND.(TC.EQ.'P'.OR.TC.EQ.'p'))) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
IF (SCRL) THEN
IB = SMALL
LLUQ = BIG - IB + 1
ELSE
IB = 0
LLUQ = 16384
ENDIF
IF (NUML.OR.CAPS.OR.INS) LLUQ = LLUQ - 1
IF (TC.EQ.'#') THEN
CALL BARQ(PROFIL(0),LLUQ,IB)
ELSE
CALL BAR2(PROFIL(0),LLUQ,0)
ENDIF
CALL DISPG(GRPHPG)
ELSEIF (TC.EQ.'$'.OR.ASC.EQ.16) THEN
CALL GRINIT
CALL RSTMAP
CALL SETPG(GRPHPG)
CALL GCRCLS
IF (SCRL) THEN
IF (TC.EQ.'$') THEN
IB = SMALL
IE = BIG
ELSE
IB = SMALL2
IE = BIG2
ENDIF
ELSE
7701
PRINT *,' Intensity Range: BEGIN? (=> 0)'
IB = GETINT()

I: ',I5,'-> ',I5,

7702

PRINT *,' Intensity Range: END? (<=16383)'


IE = GETINT()
ENDIF
IF (IE.EQ.0) THEN
IE = 16383 - IB
ELSEIF (IE.LT.0) THEN
IE = 16383 + IE
ENDIF
LLUQ = IE - IB + 1
CALL BAR2(PROFIL(IB),LLUQ,IB)
CALL DISPG(GRPHPG)
ELSEIF (TC.EQ.'!'.AND.SCRL) THEN
CALL INTSCO
CALL HELLO
ELSEIF (TC.EQ.'@'.OR.TC.EQ.'!'.OR.(ASC.EQ.0.AND.SCAN.EQ.121)) THEN
IF (MULTI.OR.FANCY.OR.USEWIN) THEN
CALL USEPG(GRPHPG)
IF (XLOC.NE.0.AND.YLOC.EQ.0) CALL BARPLY(IT,LLX,LLY)
IF (YLOC.NE.0.OR.XLOC.EQ.0) CALL BARPLX(IT,LLX,LLY)
ELSE
CALL GRINIT
CALL RSTMAP
LLUQ = LLX
IF (YLOC.EQ.0.AND.XLOC.EQ.0) THEN
CALL USEPG(PICPAG)
IF (XLOC.EQ.0) YLOC = (1+LLY)/2
CALL PARMKL
ENDIF
IF (SCRL.OR.YLOC.EQ.0) THEN
IF (XLOC.EQ.0) THEN
CALL USEPG(PICPAG)
IF (YLOC.NE.0) CALL PARMKL
XLOC = YLOC
IF (YLOC.EQ.0) XLOC = (1+LLX)/2
YLOC = 0
CALL PARMKL
ENDIF
DO 6009 I = 1,LLY
QR(I) = IT(XLOC,I)
6009
CONTINUE
LLUQ = LLY
SCRL = .TRUE.
ENDIF
ONE = 1
IF (CAPS.AND.NUML) THEN
LLUQ = LLUQ - 4
ONE = 3
ELSEIF (CAPS.OR.NUML) THEN
LLUQ = LLUQ - 2
ONE = 2
ENDIF
CALL USEPG(GRPHPG)
IF (TC.NE.'!') THEN
IF (SCRL) THEN
CALL BAR2(QR(1),LLUQ,ONE)
ELSE
CALL BAR2(IT(1,YLOC),LLUQ,ONE)
ENDIF
ELSE
IF (SCRL) THEN

CALL BARQ(QR(1),LLUQ,ONE)
ELSE
CALL BARQ(IT(1,YLOC),LLUQ,ONE)
ENDIF
ENDIF
ENDIF
CALL DISPG(GRPHPG)
ELSEIF ((SCRL.AND.TC.EQ.'?').OR.TC.EQ.'/') THEN
CALL USEPG(PICPAG)
IXLOC = XLOC
IYLOC = YLOC
IF (IXLOC.EQ.0) THEN
IF (XNUM.GE.1) THEN
IXLOC = XLIST(1)
ELSE
IXLOC = (1+LLX)/2
ENDIF
ENDIF
IF (IYLOC.EQ.0) THEN
IF (YNUM.GE.1) THEN
IYLOC = YLIST(1)
ELSE
IYLOC = (1+LLY)/2
ENDIF
ENDIF
I = IT(IXLOC,IYLOC)
MESSV2 = ' '
WRITE (MESSV2,'(A,I5.5,A,I3.3,A,I3.3)',ERR=7750) ' Value is ',I,' @ X
=',IXLOC,' & Y = ',IYLOC
CALL SAYATQ(13,2,30,MESSV)
7750
CALL SETPG(PICPAG)
ELSEIF (TC.EQ.'?'.AND.(.NOT.SCRL)) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
IF (NUML.OR.CAPS) THEN
CALL PLOTHP
ELSE
CALL PLTHLP
ENDIF
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$31) THEN
GOTO 6667
ELSEIF (ASC.EQ.27.OR.ASC.EQ.14.OR.(ASC.EQ.0.AND.SCAN.EQ.$31)) THEN
IF (ASC.EQ.27) THEN
PAUSE = .TRUE.
CALL ISNTRP
PAUSE = .FALSE.
ENDIF
IF (ASC.EQ.27.OR.ASC.EQ.14.OR.(ASC.EQ.0.AND.SCAN.EQ.$31)) GOTO 9994
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 9994
ELSEIF (SCRL.AND.(SCAN.EQ.$13.OR.SCAN.EQ.$31)) THEN
IF (YLOC.EQ.0.AND.XLOC.EQ.0) THEN
YLOC = (1+LLY)/2
CALL USEPG(PICPAG)
CALL PARMKL
ENDIF
CALL USEPG(GRPHPG)
IF (XLOC.NE.0.AND.YLOC.EQ.0) THEN
IF (SCAN.EQ.$13) CALL PARPRY(IT,LLX,LLY)
IF (SCAN.EQ.$31) CALL PARPNY(IT,LLX,LLY)

ENDIF
IF (YLOC.NE.0.OR.XLOC.EQ.0) CALL PARPNX(IT,LLX,LLY)
CALL LEDSON
CALL DISPG(GRPHPG)
ELSEIF (SCRL.AND.SCAN.EQ.$30) THEN
CALL USEPG(GRPHPG)
IF (LSH.OR.RSH) CALL GRCLS
YFLAG = .FALSE.
IF (YLOC.EQ.0) THEN
YFLAG = .TRUE.
IF (YNUM.EQ.0) THEN
YLOC = (1+LLY)/2
FL2 = .FALSE.
ELSE
YLOC = YLIST(YNUM)
YNUM = YNUM - 1
FL2 = .TRUE.
ENDIF
ENDIF
IF (LSH.OR.RSH) CALL LRQUAD
CALL PARPLX(IT,LLX,LLY)
IF (YFLAG) THEN
IF (FL2) THEN
YNUM = YNUM + 1
YLIST(YNUM) = YLOC
ENDIF
YLOC = 0
ENDIF
XFLAG = .NOT.YFLAG .OR. (XNUM.GT.0)
IF (XLOC.EQ.0) THEN
XFLAG = .TRUE.
IF (XNUM.EQ.0) THEN
XLOC = (1+LLX)/2
FL2 = .FALSE.
ELSE
XLOC = XLIST(XNUM)
XNUM = XNUM - 1
FL2 = .TRUE.
ENDIF
ENDIF
IF (LSH.OR.RSH) THEN
CALL ULQUAD
CALL PARPLY(IT,LLX,LLY)
ELSE
CALL PARPOY(IT,LLX,LLY)
ENDIF
IF (XFLAG) THEN
IF (FL2) THEN
XNUM = XNUM + 1
XLIST(XNUM) = XLOC
ENDIF
XLOC = 0
ENDIF
CALL LEDSON
CALL DISPG(GRPHPG)
ELSEIF ((ASC.EQ.25.OR.(SCAN.EQ.21.AND.(ASC.EQ.0.OR.SCRL)).OR.TC.EQ.'H'.OR.
TC.EQ.'h'.OR.
& ASC.EQ.8.OR.(SCAN.EQ.$23.AND.(ASC.EQ.0.OR.SCRL))).AND.(ONPIC.OR.SCRL)) T
HEN
CALL USEPG(PICPAG)

IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL


XLOC = 0
IF (YNUM.GT.0.AND.(TC.EQ.'H'.OR.TC.EQ.'h')) THEN
YLOC = YLIST(YNUM)
YNUM = YNUM - 1
ELSE
YLOC = (1+LLY)/2
CALL PARMKL
ENDIF
ELSEIF ((ASC.EQ.24.OR.(SCAN.EQ.$2D.AND.(ASC.EQ.0.OR.SCRL)).OR.TC.EQ.'V'.OR
.TC.EQ.'v'.OR.
& ASC.EQ.22.OR.(SCAN.EQ.$2F.AND.(ASC.EQ.0.OR.SCRL))).AND.(ONPIC.OR.SCRL))
THEN
CALL USEPG(PICPAG)
IF (XLOC.NE.0.OR.YLOC.NE.0) CALL PARMKL
YLOC = 0
IF (XNUM.GT.0.AND.(TC.EQ.'V'.OR.TC.EQ.'v')) THEN
XLOC = XLIST(XNUM)
XNUM = XNUM - 1
ELSE
XLOC = (1+LLX)/2
CALL PARMKL
ENDIF
ELSEIF (SCRL.AND.SCAN.EQ.$2E) THEN
FOO = CAPS
BAR = NUML
CALL USEPG(GRPHPG)
CALL GCRCLS
IXL = LLX
IYL = LLY
IIIT = KADDR(IT(1,1))
PRINT *,' Number of points to convolve? (3,5,7)'
ISPT = MENU(3,3,8)
IIPT = MOD(ISPT,2)
IF (IIPT.EQ.0) ISPT = ISPT - 1
J = 0
DO 3186 I = 1,ISPT
3185
PRINT *,I,'th COEEFICIENT? (integer)'
READ (*,'(BN,I8)',ERR=3185) INPUT
IF (INPUT.LT.-32768.OR.INPUT.GT.32767) GOTO 3185
CONVAR(I) = INPUT
J = J + INPUT
3186
CONTINUE
IF (J.EQ.0) J = 1
CONVAR(0) = J
3187
PRINT *,'DIVISOR = ? (',J,' default)'
READ (*,'(BN,I8)',ERR=3187) INPUT
IF (INPUT.GT.0.AND.INPUT.LT.32767) CONVAR(0) = INPUT
*
IF (ISPT.LE.4) THEN
*
PRINT *,' CONVOLVE X-only(1), Y-only(2), Back Diag(4), Diag(8) '
*
PRINT *,' X&Y(3), both Diags(12), all(15), ABORT(16)'
*
III = MENU(3,0,16)
*
ELSE
PRINT *,' CONVOLVE X-only(1), Y-only(2), X&Y(3), NO-OP(4)'
III = MENU(3,0,4)
IF (III.EQ.4) III = 0
*
ENDIF
IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN
III = 16
IJI = 0

ELSE

*
*
*
*
*
*
*
*
*
*
*
*
*
*

PRINT *,' ABSOLUTE VALUE? (y/N)'


IJI = MENU(0,0,1)
ENDIF
IF (IJI.EQ.1) THEN
IIJ = IAND(III,$03)
IF (IIJ.EQ.1) THEN
PRINT *,' CONVOLVE X'
IF (ISPT.LE.4) THEN
CALL IANV3X(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IANV5X(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IANV7X(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' CONVOLVE Y'
IF (ISPT.LE.4) THEN
CALL IANV3Y(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IANV5Y(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IANV7Y(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' CONVOLVE X&Y'
IF (ISPT.LE.4) THEN
CALL IANV3(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IANV5(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IANV7(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ENDIF
IF (ISPT.EQ.3) THEN
III = III/4
IIJ = IAND(III,$03)
IF (IIJ.EQ.1) THEN
PRINT *,' CONVOLVE Back DIAG.'
CALL IANV3L(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' CONVOLVE DIAG.'
CALL IANV3R(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' CONVOLVE BOTH DIAG.'
CALL IANV3D(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ENDIF
ELSE
IIJ = IAND(III,$03)
IF (IIJ.EQ.1) THEN
PRINT *,' CONVOLVE X'
IF (ISPT.LE.4) THEN
CALL ICNV3X(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL ICNV5X(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL ICNV7X(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ELSEIF (IIJ.EQ.2) THEN

*
*
*
*
*
*
*
*
*
*
*
*
*
*

PRINT *,' CONVOLVE Y'


IF (ISPT.LE.4) THEN
CALL ICNV3Y(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL ICNV5Y(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL ICNV7Y(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' CONVOLVE X&Y'
IF (ISPT.LE.4) THEN
CALL ICNV3(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL ICNV5(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL ICNV7(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ENDIF
IF (ISPT.EQ.3) THEN
III = III/4
IIJ = IAND(III,$03)
IF (IIJ.EQ.1) THEN
PRINT *,' CONVOLVE Back DIAG.'
CALL ICNV3L(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' CONVOLVE DIAG.'
CALL ICNV3R(CONVAR(0),IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' CONVOLVE BOTH DIAG.'
CALL ICNV3D(CONVAR(0),IIIT,IXL,IYL)
ENDIF
ENDIF
ENDIF
PRINT *,'CONVOLUTION DONE '
GOTO 6667
ELSEIF (TC.EQ.'T'.AND.(LSH.OR.RSH)) THEN
CALL USEPG(GRPHPG)
CALL GCRCLS
PRINT *,' TRIMMING EDGE... '
IXL = LLX
IYL = LLY
IIIT = KADDR(IT(1,1))
CALL ITRIM(IIIT,IXL,IYL)
GOTO 6667
ELSEIF (TC.EQ.'W'.AND.(LSH.OR.RSH)) THEN
CALL USEPG(GRPHPG)
CALL GCRCLS
PRINT *,' TRIMMING EDGES ... '
IXL = LLX
IYL = LLY
IIIT = KADDR(IT(1,1))
CALL ITWIM(IIIT,IXL,IYL)
GOTO 6667
ELSEIF (TC.EQ.'R'.OR.TC.EQ.'r') THEN
CALL SETPG0
CALL USEPG0
CALL DOSCOP
CALL CRUNCH
ELSEIF (SCRL.AND.SCAN.EQ.$1F) THEN
FOO = CAPS

BAR = NUML
CALL USEPG(GRPHPG)
CALL GCRCLS
IXL = LLX
IYL = LLY
IIIT = KADDR(IT(1,1))
PRINT *,' Mean(0) or MEDIAN(1) SMOOTHING?'
IJ = MENU(1,0,1)
IF (IJ.EQ.1) THEN
PRINT *,' # of points (3,5,7; even -> follow w/extra 3 pt.)'
ISPT = MENU(3,3,8)
IF (ISPT.LE.4) THEN
PRINT *,' MEDIAN SMOOTH X-only(1), Y-only(2), Back Diag(4), Di
ag(8) '
PRINT *,' X&Y(3), both Diags(12), all(15), ABORT(16)'
III = MENU(3,0,16)
ELSE
PRINT *,' MEDIAN SMOOTH X-only(1), Y-only(2), X&Y(3), NO-OP(4)
'
III = MENU(3,0,4)
IF (III.EQ.4) III = 0
ENDIF
IF (ABORT.OR.ESCAPE.OR.INTRPT) III = 16
IIJ = IAND(III,$03)
IISPT = IAND(ISPT,$01)
IF (IIJ.EQ.1) THEN
PRINT *,' MEDIAN SMOOTH X'
IF (ISPT.LE.4) THEN
CALL IMED3X(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMED5X(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IMED7X(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMED3X(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' MEDIAN SMOOTH Y'
IF (ISPT.LE.4) THEN
CALL IMED3Y(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMED5Y(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IMED7Y(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMED3Y(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' MEDIAN SMOOTH X&Y'
IF (ISPT.LE.4) THEN
CALL IMED3(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMED5(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.8) THEN
CALL IMED7(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMED3(IIIT,IXL,IYL)
ENDIF
III = III/4
IIJ = IAND(III,$03)
IF (IIJ.EQ.1) THEN
PRINT *,' MEDIAN SMOOTH Back DIAG.'

CALL IMED3L(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMED3L(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' MEDIAN SMOOTH DIAG.'
CALL IMED3R(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMED3R(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' MEDIAN SMOOTH BOTH DIAG.'
CALL IMED3D(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMED3D(IIIT,IXL,IYL)
ENDIF
ELSE
PRINT *,' # of points (3,5,7; even -> follow w/extra 3 pt.)'
ISPT = MENU(3,3,8)
IF (ISPT.LE.4) THEN
PRINT *,' MEAN SMOOTH X-only(1), Y-only(2), Back Diag(4), Diag
(8) '
PRINT *,' X&Y(3), both Diags(12), all(15), ABORT(16)'
III = MENU(3,0,16)
ELSE
PRINT *,' MEAN SMOOTH X-only(1), Y-only(2), X&Y(3), NO-OP(4)'
III = MENU(3,0,4)
IF (III.EQ.4) III = 0
ENDIF
IF (ABORT.OR.ESCAPE.OR.INTRPT) III = 16
IIJ = IAND(III,$03)
IISPT = IAND(ISPT,$01)
IF (IIJ.EQ.1) THEN
PRINT *,' MEAN SMOOTH X'
IF (ISPT.LE.4) THEN
CALL IMEN3X(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMEN5X(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.7) THEN
CALL IMEN7X(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMEN3X(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' MEAN SMOOTH Y'
IF (ISPT.LE.4) THEN
CALL IMEN3Y(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMEN5Y(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.7) THEN
CALL IMEN7Y(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMEN3Y(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' MEAN SMOOTH X&Y'
IF (ISPT.LE.4) THEN
CALL IMEN3(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.6) THEN
CALL IMEN5(IIIT,IXL,IYL)
ELSEIF (ISPT.LE.7) THEN
CALL IMEN7(IIIT,IXL,IYL)
ENDIF
IF (IISPT.EQ.0) CALL IMEN3(IIIT,IXL,IYL)
ENDIF
III = III/4
IIJ = IAND(III,$03)

IF (IIJ.EQ.1) THEN
PRINT *,' MEAN SMOOTH Back DIAG.'
CALL IMEN3L(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMEN3L(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.2) THEN
PRINT *,' MEAN SMOOTH DIAG.'
CALL IMEN3R(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMEN3R(IIIT,IXL,IYL)
ELSEIF (IIJ.EQ.3) THEN
PRINT *,' MEAN SMOOTH BOTH DIAG.'
CALL IMEN3D(IIIT,IXL,IYL)
IF (IISPT.EQ.0) CALL IMEN3D(IIIT,IXL,IYL)
ENDIF
ENDIF
PRINT *,'SMOOTHING DONE '
GOTO 6667
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$1F) THEN
I = 0
IF (INS) I = I + 8
IF (CAPS) I = I + 4
IF (NUML) I = I + 2
IF (LSH) I = I + 1
IF (I.NE.0) THEN
IF (SCRL) THEN
CALL FILLWD(($0101*I))
ELSE
CALL FILLWD(($1010*I))
ENDIF
IF (RSH) CALL FILLWD(($1111*I))
CALL PXLRST
IF (ONPIC.AND.SCRL) THEN
CALL USEPG(PICPAG)
CALL DOFILL(0,0,XLIM,YLIM)
CALL FILLWD($FFFF)
CALL PXLSET
ELSEIF (.NOT.ONPIC) THEN
CALL USEPG(GRPHPG)
CALL DOFILL(1,1,766,478)
CALL FILLWD($FFFF)
CALL PXLSET
ENDIF
ENDIF
ELSEIF (ASC.EQ.18.OR.(ASC.EQ.0.AND.SCAN.EQ.$13).AND.(ONPIC.OR.SCRL)) THEN
CALL USEPG(PICPAG)
CALL FILLWD($FFFF)
CALL PXLXOR
CALL DOFILL(0,0,XLIM,YLIM)
ELSEIF (TC.EQ.'*'.OR.SCAN.EQ.55) THEN
CALL PRTSC
ELSEIF (SCAN.GE.$3B.AND.SCAN.LE.$44) THEN
CALL DSPSWP
ELSEIF (ASC.EQ.13.AND.SCRL) THEN
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
REPEAT = .TRUE.
FLAG = .FALSE.
CALL PXLSET
PRINT *,'SHIFT PICTURE'
2828
PRINT *,' UP(+)/DOWN(-)/no vertical(0) - How much?'

READ (*,*,ERR=2828) IQROW


IQROW = GETINT()
2829
PRINT *,' RIGHT(+)/LEFT(-)/no horizontal(0) - How much?'
*
READ (*,*,ERR=2829) IQCOL
IQCOL = GETINT()
ISHF = IQCOL + IQROW*LLX
FLAG = ISHF.NE.0
*
IIIT = KADDR(IT(1,1))
CALL ROTBUF(IT,ISHF,LLX,LLY)
GOTO 8329
ELSEIF (ASC.EQ.1) THEN
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
REPEAT = .TRUE.
FLAG = .FALSE.
CALL PXLSET
PRINT *,'REDISPLAY '
PRINT *,' '
SPAUSE = PAUSE
SCNFRM = CONFRM
PAUSE = .FALSE.
CONFRM = .TRUE.
NMAG = MAG
I = IAND(NMAG,15)
J = NMAG/16
PRINT *,' Horizontal magnification factor was: ',I,' CHANGE? (y/N) '
K = MENU(0,0,1)
IF (K.EQ.1) THEN
FLAG = .TRUE.
PRINT *,' NEW horizontal magnification? (0=AUTO, 1 .. 4)'
I = MENU(0,0,4)
ENDIF
NMAG = I + J*16
IF (ASC.EQ.10) GOTO 8329
CALL XYGOTO(0,5)
PRINT *,' Vertical magnification factor was: ',J,' CHANGE? (y/N) '
K = MENU(0,0,1)
IF (K.EQ.1) THEN
PRINT *,' NEW vertical magnification? (0=AUTO, 1 .. 4)'
FLAG = .TRUE.
J = MENU(0,0,4)
ENDIF
NMAG = I + J*16
IF (ASC.EQ.10) GOTO 8329
CALL XYGOTO(0,5)
PRINT *,'BASLOG/BASVAL setting was ',BSLG,' / ',BSVL,' CHANGE?(y/N)'
K = MENU(0,0,1)
IF (K.EQ.1) THEN
FLAG = .TRUE.
9979
PRINT *,' NEW BASE VALUE LOGARITHM? (REAL)'
*
READ (*,'(BN,F17.0)',ERR=9979) BSLG
BSLG = GETRL()
BSVL = 2.0**BSLG
ENDIF
IF (ASC.EQ.10) GOTO 8329
CNTRS = CONTRS
CALL XYGOTO(0,5)
PRINT *,'Contrast setting was ',CNTRS,' CHANGE?(y/N)'
K = MENU(0,0,1)

9980
*

9981
*

9982
*

9781
IS ',BIG2

IF (K.EQ.1) THEN
FLAG = .TRUE.
PRINT *,' NEW contrast setting? (-1 .. 0 .. +1)'
READ (*,'(BN,F17.0)',ERR=9980) CNTRS
CNTRS = GETRL()
IF (CNTRS.GT.1.0) CNTRS = 1.0
IF (CNTRS.LT.-1.0) CNTRS = -1.0
ENDIF
IF (ASC.EQ.10) GOTO 8329
BRGHT = BRIGHT
CALL XYGOTO(0,5)
PRINT *,'Brightness setting was ',BRGHT,' CHANGE?(y/N)'
K = MENU(0,0,1)
IF (K.EQ.1) THEN
FLAG = .TRUE.
PRINT *,' NEW brightness setting? (-1 .. 0 .. +1)'
READ (*,'(BN,F17.0)',ERR=9981) BRGHT
BRGHT = GETRL()
IF (BRGHT.GT.1.0) BRGHT = 1.0
IF (BRGHT.LT.-1.0) BRGHT = -1.0
ENDIF
IF (ASC.EQ.10) GOTO 8329
IGN2 = IGNOR
CALL XYGOTO(0,5)
PRINT *,'Tails ignore variable = ',IGN2,' CHANGE?(y/N)'
K = MENU(0,0,1)
IF (K.EQ.1) THEN
FLAG = .TRUE.
PRINT *,'NEW tail ignore setting? (>4)'
READ (*,'(BN,I8)',ERR=9982) IGN2
IGN2 = GETINT()
IF (IGN2.LT.5) IGN2 = 100
IGNOR = IGN2
IF (ASC.EQ.10) GOTO 8329
ELSEIF (ASC.NE.10) THEN
IBIG = BIG
ISMALL = SMALL
CALL XYGOTO(0,5)
PRINT *,'CURRENT SMALL (FLOOR) IS ',SMALL,' CHANGE?(y/N)'
K = MENU(0,0,1)
IF (K.EQ.1) THEN
BIGSML = .TRUE.
FLAG = .TRUE.
SMLSAV = SMALL
PRINT *,' ABSOLUTE FLOOR VALUE IS ',SMALL2,' ABSOLUTE CEILING

PRINT *,' NEW SMALL IS? (between absolute limits above)'


READ (*,'(BN,I6)',ERR=9781) ISMALL
ISMALL = GETINT()
IF (ISMALL.GT.0.AND.ISMALL.LT.SMALL2.AND..NOT.(ISTEST.OR.CNVDB
G)) ISMALL = SMALL2
IF (ISMALL.EQ.0) ISMALL = SMLSAV
IF (ISMALL.LT.0) ISMALL = 0
SMALL = ISMALL
ENDIF
FLAG = FLAG .OR. FLAG2
IF (ASC.EQ.10) GOTO 8329
CALL XYGOTO(0,5)
PRINT *,'CURRENT BIG (CEILING) IS ',BIG,' CHANGE?(y/N)'
K = MENU(0,0,1)
*

9782

IF (K.EQ.1) THEN
BIGSML = .TRUE.
FLAG = .TRUE.
BIGSAV = BIG
CONTINUE
PRINT *,' ABSOLUTE FLOOR VALUE IS ',SMALL2,' ABSOLUTE CEILING

IS ',BIG2
PRINT *,' NEW BIG IS? (between absolute limits above)'
READ (*,'(BN,I6)',ERR=9782) IBIG
IBIG = GETINT()
IF (IBIG.GT.BIG2.AND..NOT.(ISTEST.OR.CNVDBG)) IBIG = BIG2
IF (IBIG.LT.0) IBIG = -IBIG
IF (IBIG.EQ.0) IBIG = BIGSAV
BIG = IBIG
ENDIF
FLAG2 = BIG.NE.IBIG .OR. ISMALL.NE.SMALL
IF (FLAG2) THEN
RANGE = BIG - SMALL
IF (RANGE.EQ.0) RANGE = 1
BIG = SMALL + RANGE
ENDIF
FLAG = FLAG .OR. FLAG2
ENDIF
IF (ASC.EQ.10) GOTO 8329
CALL XYGOTO(0,5)
PRINT *,'R(11) is ',R(11),' change? (y/N)'
K = MENU(0,0,1)
IF (K.EQ.1) THEN
FLAG = .TRUE.
9983
PRINT *,' NEW R(11) = ? (0 .. 65535) '
*
READ (*,'(BN,I6)',ERR=9983) IR
IR = GETINT()
R(11) = IR
ENDIF
GOTO 8329
ELSEIF (TC.EQ.'K'.OR.TC.EQ.'k') THEN
CALL PXLSET
CALL FILLWD($FFFF)
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
IGN2 = IGNOR
NMAG = MAG
PRINT *,' KILLIT = ',KILLIT,' NEW VALUE? (True/False)'
IIJ = MENU(ITKILL,0,1)
IF (IIJ.NE.ITKILL) THEN
ITKILL = IIJ
GOTO 6666
ELSE
GOTO 7777
ENDIF
ELSEIF (TC.EQ.'N'.OR.TC.EQ.'n') THEN
CALL PXLSET
CALL FILLWD($FFFF)
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
IGN2 = IGNOR
NMAG = MAG
PRINT *,' NOT14 = ',NOT14,' NEW VALUE? (True/False)'
*

IIJ = MENU(INOT14,0,1)
IF (IIJ.NE.INOT14) THEN
INOT14 = IIJ
GOTO 6666
ELSE
GOTO 7777
ENDIF
ELSEIF (SCRL.AND.(TC.EQ.'T'.OR.TC.EQ.'t')) THEN
CALL PXLSET
CALL FILLWD($FFFF)
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
IGN2 = IGNOR
NMAG = MAG
PRINT *,' '
PRINT *,'Tails ignore variable = ',IGN2
9989
PRINT *,'NEW tail ignore setting? (>4)'
*
READ (*,'(BN,I8)',ERR=9989) IGN2
IGN2 = GETINT()
FLAG = .FALSE.
IF (IGN2.GT.3) THEN
IGNOR = IGN2
IGNORE = IGN2
FLAG = .TRUE.
ENDIF
PRINT *,' '
PRINT *,'Base Value Logarithm = ',BASLOG
PRINT *,'NEW Base Value ? (real, invalid for no change)'
READ (*,'(BN,F17.0)',ERR=9987) BSLG
BSVL = 2.0**BSLG
SAVBAS = BSVL
SAVLOG = BSLG
BASLOG = BSLG
BASVAL = BSVL
9987
CONTINUE
IF (FLAG.OR.RS.NE.BASLOG) GOTO 6666
ELSEIF (SCAN.GE.133.OR.SCAN.LT.0) THEN
IF ((SCAN.GE.$091.AND.SCAN.LE.$097).OR.(SCAN.GE.$0A4.AND.SCAN.LE.$0AA)
.OR.
&
(SCAN.GE.$0B6.AND.SCAN.LE.$0B9).OR.(SCAN.GE.$0BE.AND.SCAN.LE.$0C7).OR
.
&
SCAN.EQ.$AD.OR.SCAN.EQ.$AE.OR.ASC.EQ.0) THEN
GEWAIT = 911
GOTO 9949
ENDIF
ELSEIF (SCRL.AND.(TC.EQ.'<'.OR.TC.EQ.'>'.OR.TC.EQ.'=')) THEN
CALL PXLSET
CALL FILLWD($FFFF)
CALL LEDSET(6)
CALL SETPG0
CALL GCRCLS
IGN2 = IGNOR
NMAG = MAG
BIGSAV = BIG
SMLSAV = SMALL
ISMALL = SMALL
IBIG = BIG
PRINT *,' '
IF (TC.EQ.'='.OR.TC.EQ.'<') THEN

9881

PRINT *,'CURRENT SMALL (FLOOR) IS ',SMALL


PRINT *,' ABSOLUTE FLOOR VALUE IS ',SMALL2,' ABSOLUTE CEILING IS '

,BIG2
PRINT *,' NEW SMALL IS? (between absolute limits above)'
READ (*,'(BN,I6)',ERR=9881) ISMALL
ISMALL = GETINT()
IF (ISMALL.GT.0.AND.ISMALL.LT.SMALL2.AND..NOT.(ISTEST.OR.CNVDBG))
ISMALL = SMALL2
IF (ISMALL.LT.0) ISMALL = -ISMALL
IF (ISMALL.EQ.0) ISMALL = SMLSAV
SMALL = ISMALL
BIGSML = .TRUE.
ENDIF
IF (TC.EQ.'='.OR.TC.EQ.'>') THEN
9882
PRINT *,'CURRENT BIG (CEILING) IS ',BIG
PRINT *,' ABSOLUTE FLOOR VALUE IS ',SMALL2,' ABSOLUTE CEILING IS '
,BIG2
PRINT *,' NEW BIG IS? (between absolute limits above)'
*
READ (*,'(BN,I6)',ERR=9882) IBIG
IBIG = GETINT()
IF (IBIG.GT.BIG2.AND..NOT.(ISTEST.OR.CNVDBG)) IBIG = BIG2
IF (IBIG.LT.0) IBIG = -IBIG
IF (IBIG.EQ.0) IBIG = BIGSAV
BIG = IBIG
BIGSML = .TRUE.
ENDIF
FLAG = BIG.NE.IBIG .OR. ISMALL.NE.SMALL .OR. BIGSML
IF (FLAG) THEN
BIG = IBIG
SMALL = ISMALL
RANGE = BIG - SMALL
IF (RANGE.EQ.0) RANGE = 1
GOTO 6666
ENDIF
C
REPEAT = .TRUE.
C
CALL GRINIT
C
CALL FULLSC
C
CALL RSTMAP
C
CALL PXLSET
C
CALL FILLWD($FFFF)
C
CALL LEDSET(6)
C
CALL DISPG(DISP)
C
GEWAIT = 0
C
RETURN
ELSEIF (ASC.EQ.2.AND.SCAN.EQ.$30) THEN
CALL SETPG0
CALL WFMOPS
GOTO 9000
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$30) THEN
CALL SETPG0
CALL OCCAS
GOTO 9000
ELSEIF (TC.EQ.'B'.OR.TC.EQ.'b') THEN
CALL SETPG0
CALL LABELR
IF (END) GOTO 9000
CALL DOSCOP
CALL CRUNCH
CALL WFMOUT
GOTO 9000
*

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

ELSEIF (TC.EQ.'7'.AND.SCRL) THEN


CALL SETPG0
CALL CLS
L = IWHBUF(IT(1,1))
IF (.NOT.ZVALID) THEN
PRINT *,'ZERO CORRECTION BUFFER NOT VALID - CONTINUE? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) GOTO 9000
ENDIF
PRINT *,'Zero correcting buffer #',L
K = L
IF (LENXS(K).NE.LENXS(4).OR.LENYS(K).NE.LENYS(4)) THEN
PRINT *,'BUFFER ASPECT RATIOS DIFFER'
GOTO 9000
ENDIF
IJ = LENXS(K)*LENYS(K)
CALL OMAZRO(K,4,IJ)
GOTO 6667
ELSEIF (TC.EQ.'8'.AND.SCRL) THEN
CALL SETPG0
CALL CLS
L = IWHBUF(IT(1,1))
IF (.NOT.AVALID) THEN
PRINT *,'MAX. CORRECTION BUFFER NOT VALID - CONTINUE? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) GOTO 9000
ENDIF
PRINT *,'NORMALIZING buffer #',L
K = L
IF (LENXS(K).NE.LENXS(5).OR.LENYS(K).NE.LENYS(5)) THEN
PRINT *,'BUFFER ASPECT RATIOS DIFFER'
GOTO 9000
ENDIF
IJ = LENXS(K)*LENYS(K)
CALL OMAMAX(K,5,IJ)
GOTO 6667
ELSEIF (ASC.EQ.15) THEN
GOTO 9000
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$45) THEN
I = 23
J = KADDR(I)
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
L = FCALL2(PACTLX,IAPS(0),J)
IF (L.EQ.911) GOTO 9002
IF (L.EQ.2) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
CALL PLOTHP
ENDIF
ELSEIF (SCAN.LE.$53.AND.(.NOT.SCRL)) THEN
I = 23
J = KADDR(I)
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
L = FCALL2(PACOMM,IAPS(0),J)
IF (L.EQ.911) GOTO 9002

IF (L.EQ.2) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
CALL PLOTHP
ENDIF
ELSEIF (SCAN.LE.$53.AND.SCRL) THEN
I = 23
J = KADDR(I)
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
L = FCALL2(PASCRL,IAPS(0),J)
IF (L.EQ.911) GOTO 9002
IF (L.EQ.2) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
CALL PLOTHP
ENDIF
ELSEIF (SCAN.GT.$53) THEN
I = 23
J = KADDR(I)
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
L = FCALL2(PAKPDX,IAPS(0),J)
IF (L.EQ.911) GOTO 9002
IF (L.EQ.2) THEN
CALL GRINIT
CALL RSTMAP
CALL USEPG(GRPHPG)
CALL PLOTHP
ENDIF
ELSEIF (SCRL) THEN
IJKLI = 22
II = PASCRL(A128,IJKLI)
*
IF (II.EQ.2) GOTO 2
*
IF (II.EQ.911) GOTO 911
*
IF (II.EQ.9999) GOTO 9999
ELSE
IJKLI = 22
II = PACOMM(A128,IJKLI)
*
IF (II.EQ.2) GOTO 2
*
IF (II.EQ.911) GOTO 911
*
IF (II.EQ.9999) GOTO 9999
ENDIF
GOTO 9000
9994 CONTINUE
GEWAIT = 0
9949 CONTINUE
CALL SHIFTS
IF (NUML) CALL NUMLOF
REPEAT = .FALSE.
CALL FULLSC
CALL USEPG1
CALL PARMKL
XLOC = 0
DO 8080 I = 1,YNUM
YLOC = YLIST(I)

CALL PARMKL
8080 CONTINUE
YNUM = 0
YLOC = 0
DO 8081 I = 1,XNUM
XLOC = XLIST(I)
CALL PARMKL
8081 CONTINUE
XNUM = 0
XLOC = 0
IF (CRSDSP) CALL CLLINE(3,13)
CALL GRINIT
CALL FULLSC
CALL RSTMAP
CALL PXLSET
CALL SETPG0
CALL PLTTRM
CALL FILLWD($FFFF)
CALL GRCLS
CALL CCNSL0
MAG = 17
NMAG = MAG
BRIGHT = 0.0
BRGHT = 0.0
CONTRS = 0.0
BASVAL = SAVBAS
BASLOG = SAVLOG
CNTRS = 0.0
PAUSE = SPAUSE
CONFRM = SCNFRM
CALL NUMLOF
CALL CAPSON
CALL LEDSOF
NOSAV = .FALSE.
RETURN
*
8329 CONTINUE
PAUSE = SPAUSE
CONFRM = SCNFRM
IF (.NOT.FLAG) THEN
PRINT *,'You have not changed any of the plot parameters!'
PRINT *,' REPLOT ANYWAY? (y/N)'
K = MENU(0,0,1)
FLAG = K.EQ.1
ENDIF
8330 CONTINUE
IF (FLAG) THEN
BRIGHT = BRGHT
CONTRS = CNTRS
BASLOG = BSLG
BASVAL = BSVL
MAG = NMAG
GOTO 6666
ENDIF
7777 CONTINUE
CALL PLOTHP
GOTO 9000
6667 CONTINUE
IF (.NOT.(BIGSML.OR.FOO)) THEN
PRINT *,'Recomputing display normalization. '

CALL N0RML2(IT,LLX,LLY)
ENDIF
IF (FOO.OR.BAR) GOTO 9000
6666 CONTINUE
REPEAT = .TRUE.
NOSAV = .TRUE.
CALL GRINIT
CALL FULLSC
CALL RSTMAP
CALL PXLSET
CALL FILLWD($FFFF)
CALL LEDSET(6)
IGN2 = IGNOR
IF (.NOT.BIGSML) CALL RNORML(IGN2,LLX,LLY)
CALL DISPG(DISP)
GEWAIT = 0
NMAG = MAG
CALL NUMLOF
RETURN
*
ENTRY REGEWT
INITYT = .FALSE.
RETURN
END
*---------------------------------------------------------------------$SEGMENT X_GRAPH
INTEGER*4 FUNCTION G3WAIT(IT,LLX,LLY)
CHARACTER*78 SCMESS
CHARACTER*24 FNAME,FNAME2,FRMTYP(-2:20)*22,MESSV*40,MESSV2*60,MESSP*12
CHARACTER*8 HAPS(32)
CHARACTER*1 TC,TCALGN(2),MGFRMN(2)
REAL*4 R500(16384),BASVAL,BASLOG,GETRL,CHGVLT,TINCR
REAL*4 DATA(3,1024),D256L(3,1024),D128L(3,512),D75L(3,300),D64L(3,256)
REAL*4 PR256L(3,256,4),PR128L(3,128,4),PR75L(3,75,4),PR64L(3,64,4)
REAL*4 PR50L(3,50,4),D50L(3,200),D500(500,40),D250(250,80),D125(125,160)
REAL*4 PLOT1K(1024,2,10),PLT512(512,2,20),PLT256(256,2,40),D128(128,160)
REAL*4 D170(170,120),D20480(20480)
INTEGER*4 ERROR,RECLEN,FREC
INTEGER*4 DISP,USEP,DSPAGE,GRPAGE,XMAX,YMAX,OTHER,PICPAG,GRPHPG,IZRO,I
INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,MODE,IGNORE,TYPFRM
INTEGER*4 XNUM,YNUM,XLIST(36),YLIST(36),CUMUL(0:16383),NFRAME,NDRIVE
INTEGER*4 IWHERE,IWHERR,KADDR,BIGSAV,SMLSAV,IXL,IYL,GETINT,IWH,ONE
INTEGER*4 XLIM,YLIM,HILO,MAG,LLX,LLY,PLTRMN,PLTRMX,PLTDMN,PLTDMX,CONVAR(0:
7)
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,APSCR1,APSCR2,APSCR3
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,AFMTYP,SCRMRK,APS(0:7)
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,LNS(0:7),IAPS(32),LENS(32)
INTEGER*4 L,B,RR,T,FQUERY,FCALL2,LLCTRD,RLCTRD,BLCTRD,TLCTRD
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
INTEGER*2 TAGS(80,4),FRAMTG(80),TYPTAG(80),WHERTG(80),NPNTAG(80)
INTEGER*2 PROFIL(0:16383),BIG,SMALL,RANGE,BIG2,SMALL2,I16384,DEFBUF
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,QR(16382),R(11),ISOBAS,ISOTOL
INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP,VCNTRL,HCNTRL,VCTRLN,HCTRLN
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,IT(LLX,LLY)
INTEGER*2 PATH1X,PATH1Y,PATH2X,PATH2Y,PATH3X,PATH3Y
INTEGER*2 PATH(2,6),PATH4X,PATH4Y,PATH5X,PATH5Y,PATH6X,PATH6Y
LOGICAL*4 REPEAT,FLAG,CRSDSP,FLAG2,FCKD,SKIPIT,NOT14,KILLIT,EXISTS
LOGICAL*2 ABORT,ESCAPE,INTRPT,INITYT,NOSAV,ZVALID,AVALID,ZZCORR,AACORR
LOGICAL*2 RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,MULTI,FANCY,M2,M3
LOGICAL*2 PAUSE,SPAUSE,CONFRM,SCNFRM,ONPIC,XFLAG,FL2,YFLAG,BLCTOK,TLCTOK

LOGICAL*2 BUFGUD(32),BUFUSE(32),USEWIN,WINUSE,NQUIET,ISTEST,CNVDBG
LOGICAL*2 MGLR,MGUD,MGOTHR,MGOK,PTHDUN
LOGICAL*1 FGOOD,FSCRN,BIGSML,FOO,BAR
LOGICAL*1 DISK,END,PARAM,FUBAR
EQUIVALENCE (R500(1),QR(1)),(ITKILL,KILLIT),(INOT14,NOT14)
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC),(MESSV,MESSV2)
EQUIVALENCE (APS(0),APMAIN),(APS(1),AP1),(APS(2),AP2),(APS(3),AP3)
EQUIVALENCE (APS(4),AP4),(APS(5),AP5),(APS(6),APZR),(APS(7),APMX)
EQUIVALENCE (LNS(0),LNMAIN),(LNS(1),LN1),(LNS(2),LN2),(LNS(3),LN3)
EQUIVALENCE (LNS(4),LN4),(LNS(5),LN5),(LNS(6),LNZR),(LNS(7),LNMX)
EQUIVALENCE (IA,IAPS(1)),(IA2,IAPS(2)),(IA4,IAPS(3)),(IZ,IZR,IAPS(4))
EQUIVALENCE (IMX,IAPS(5)),(IIT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (DATA(1,1),D256L(1,1),D128L(1,1),D75L(1,1),D64L(1,1),D50L(1,1)
)
EQUIVALENCE (DATA(1,1),PR256L(1,1,1),PR128L(1,1,1),PR75L(1,1,1),PR64L(1,1,
1),PR50L(1,1,1))
EQUIVALENCE (DATA(1,1),PLOT1K(1,1,1),PLT512(1,1,1),PLT256(1,1,1),D170(1,1)
)
EQUIVALENCE (DATA(1,1),D500(1,1),D250(1,1),D125(1,1),D128(1,1),D20480(1))
EQUIVALENCE (TAGS(1,1),FRAMTG(1)),(TAGS(1,2),TYPTAG(1)),(TAGS(1,3),WHERTG(
1))
EQUIVALENCE (TAGS(1,4),NPNTAG(1)),(VCNTRL,VCTRLN),(HCNTRL,HCTRLN)
EQUIVALENCE (PATH(1,1),PATH1X),(PATH(2,1),PATH1Y)
EQUIVALENCE (PATH(1,2),PATH2X),(PATH(2,2),PATH2Y)
EQUIVALENCE (PATH(1,3),PATH3X),(PATH(2,3),PATH3Y)
EQUIVALENCE (PATH(1,4),PATH4X),(PATH(2,4),PATH4Y)
EQUIVALENCE (PATH(1,5),PATH5X),(PATH(2,5),PATH5Y)
EQUIVALENCE (PATH(1,6),PATH6X),(PATH(2,6),PATH6Y)
COMMON /MGFRAM/MGFRMN,MGLR,MGUD,MGOTHR,MGOK,/MGPATH/PATH,PTHDUN
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/SCALEM/SCMESS
COMMON /BLKLIM/XLIM,YLIM,/BLKCNV/MAG,HILO,CONTRS,BRIGHT,BASLOG
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT,BASVAL
COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,/TST/ISTEST
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/PARPLZ/R500,/DEBUGC/CNVDBG
COMMON /PARMLT/XNUM,YNUM,XLIST,YLIST,/CONVGR/R,/OMADSK/NDRIVE,NFRAME
COMMON /PARCUM/IGNORE,PROFIL,CUMUL,/ISOCM3/ISOBAS,ISOTOL
COMMON /TWOPAR/PICPAG,GRPHPG,/CONVQ2/IWHERE,IWHERR,/PLTMLT/MULTI,FANCY,M2,
M3
COMMON /PLOTSZ/PLTRMN,PLTRMX,PLTDMN,PLTDMX,/BUFDEF/DEFBUF
COMMON /PARNML/BIG,SMALL,RANGE,/XFRAME/TYPFRM,FRMTYP
COMMON /PARNM2/BIG2,SMALL2,MODE,I16384,/IPPENC/SKIPIT,/PARB14/NOT14,KILLIT
COMMON /PAWS/PAUSE,/CNFRM/CONFRM,/OMABFL/BUFGUD,BUFUSE
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR
NSN
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/WIN/USEWIN,L,B,RR,T
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/TST170/NQUIET
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,CHGVLT,TINCR,
&FREC,RECLEN,TENCPI,SXTNCP,/WFMOUT/DATA,/WFMTAG/TAGS
COMMON /FETURE/LLCTRD,RLCTRD,BLCTRD,TLCTRD,VCNTRL,HCNTRL,BLCTOK,TLCTOK
SAVE /SHFSTA/,/KEYGET/,/NTRVN/,/PAWS/,/CONFRM/,/CONVGR/,INITYT,NOSAV
SAVE /PARCUM/,/PARNML/,/PARNM2/,/IPPENC/,/PARB14/,/ISOCM3/,/PLOTSZ/,/WIN/
SAVE /BLKLIM/,/BLKCNV/,/GEWRTN/,/PARMLT/,/PARPLZ/,/CONVQ2/,/XFRAME/,/OMABF
L/
SAVE /OMABFR/,/OMACNT/,/OMATYP/,/ZEROS/,/OMASCR/,/AMPLS/,/OMADSK/,/BUFDEF/
SAVE /PLTMLT/,/SCALEM/,/NQUIET/,/GARBAG/,/WFMOUT/,/WFMTAG/,/TST/,/DEBUGC/
SAVE /FETURE/,/MGFRAM/,/MGPATH/
SAVE IGN2,IGNOR,WINUSE

EXTERNAL
EXTERNAL
EXTERNAL
EXTERNAL
SAVE

BLKDS,PARPL,CALL3,PLISO,PLIS0,STOFRM,CLS,CRCLS,GCRCLS,SAYATQ
DIRDIR,CJMPTO,PLTHLP,PLOTHP,MED3,MED3X,MED3Y,MED3L,MED3R,MED3D
KADDR,GETINT,GETRL,FQUERY,CALL2,PACONT,FCALL2,OMAZRO,SUPRES
PACOMM,PASCRL,PACTLX,PAKPDX,NUMLOF

*
IF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.120)) THEN
CALL SETPG0
CALL NSTFX0(.TRUE..AND.CTRL)
PRINT *,' NORMALIZATION Fix 0 SET TO ',CTRL
CALL WAIT(1.0)
ELSEIF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.$32)) THEN
CALL SETPG0
CALL NSTMSK(.TRUE..AND.CTRL)
PRINT *,' NORMALIZATION MASKING SET TO ',CTRL
CALL WAIT(1.0)
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.35.AND.CTRL) THEN
IF (.NOT.(HCNTRL.GE.1.AND.HCNTRL.LE.LLY)) HCNTRL = (1 + LLY) / 2
IBIG = 0
ISMALL = 16383
DO 1239 I = 1,LLX
IBIG = MAX(IBIG,IT(I,HCNTRL))
IF (IT(I,HCNTRL).GT.0.OR.LSH.OR.RSH) ISMALL = MIN(ISMALL,IT(I,HCNT
RL))
1239

,J))
1238

CONTINUE
BIG = IBIG
SMALL = ISMALL
RANGE = BIG - SMALL
IF (RANGE.EQ.0) RANGE = 1
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.47.AND.CTRL) THEN
IF (.NOT.(VCNTRL.GE.1.AND.VCNTRL.LE.LLX)) VCNTRL = (1 + LLX) / 2
IBIG = 0
ISMALL = 16383
DO 1238 J = 1,LLY
IBIG = MAX(IBIG,IT(VCNTRL,J))
IF (IT(VCNTRL,J).GT.0.OR.LSH.OR.RSH) ISMALL = MIN(ISMALL,IT(VCNTRL
CONTINUE
BIG = IBIG
SMALL = ISMALL
RANGE = BIG - SMALL
IF (RANGE.EQ.0) RANGE = 1
ELSEIF ((ASC.EQ.0.AND.SCAN.EQ.126).OR.(TC.EQ.'7'.AND.SCRL.AND.(.NOT.NUML))

) THEN
CALL SETPG0
IF (DEFBUF.EQ.4) THEN
WRITE (11,*) 'You MAY NOT zero correct the zero correction buffer.
'
GOTO 9000
ENDIF
IF ((.NOT.ZVALID).OR.(.NOT.BUFUSE(4))) THEN
WRITE (11,*) 'Zero correction buffer does NOT contain valid data.'
WRITE (11,*) 'Continue? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) GOTO 9000
ENDIF
IF (LLX.NE.LENXS(4).OR.LLY.NE.LENYS(4)) THEN
WRITE (11,*) 'Data buffer & ZRC buffer differ in aspect ratio.'
GOTO 9000
ENDIF

CALL GCRCLS
IWH = DEFBUF
IZRO = 4
LENG = LLX*LLY
CALL OMAZRO(IWH,IZRO,LENG)
FNRNSN(DEFBUF) = - ABS(FNRNSN(DEFBUF))
ELSEIF ((ASC.EQ.0.AND.SCAN.EQ.127).OR. (TC.EQ.'8'.AND.SCRL.AND.(.NOT.NUML)
)) THEN
CALL SETPG0
IF (DEFBUF.EQ.5) THEN
WRITE (11,*) 'You MAY NOT normalize the normalization buffer.'
GOTO 9000
ENDIF
IF ((.NOT.AVALID).OR.(.NOT.BUFUSE(5))) THEN
WRITE (11,*) 'Normalization buffer does NOT contain valid data.'
WRITE (11,*) 'Continue? (y/N)'
I = MENU(0,0,1)
IF (I.EQ.0) GOTO 9000
ENDIF
IF (LLX.NE.LENXS(5).OR.LLY.NE.LENYS(5)) THEN
WRITE (11,*) 'Data buffer & norm. buffer differ in aspect ratio.'
GOTO 9000
ENDIF
CALL GCRCLS
IWH = DEFBUF
IZRO = 5
LENG = LLX*LLY
CALL OMAMAX(IWH,IZRO,LENG)
FNRNSN(DEFBUF) = - ABS(FNRNSN(DEFBUF))
ELSEIF (ASC.EQ.0.AND.SCAN.EQ.131) THEN
CALL SETPG0
CALL GRCLS
CALL CALCQT
CALL CLLINE(0,12)
CALL CLLINE(1,12)
CALL CLLINE(3,12)
CALL CCNSL0
CALL SETPG1
ELSEIF (TC.EQ.'S'.AND.(LSH.OR.RSH)) THEN
CALL SETPG0
CALL FULLSC
IF (CAPS) CALL PXLXOR
CALL PL0TMS
CALL PXLSET
ELSEIF (TC.EQ.'C'.AND.(LSH.OR.RSH)) THEN
CALL SETPG0
CALL FULLSC
CALL GRCLS
ENDIF
G3WAIT = 0
RETURN
9000 CONTINUE
G3WAIT = 9000
RETURN
END
*---------------------------------------------------------------------$SEGMENT _XGRAPH
*compiler is directed to place object code in segment _XGRAPH
*
SUBROUTINE PARPLX(A256,LLX,LLY)

CHARACTER*78 SCMESS,SCSAVE
REAL R500(16384),SCALES(2,2),XMIN,XMAX,YMIN,YMAX,XOFF,XSCALE,YOFF,YSCALE
INTEGER*4 INDEX3,PLTRMN,PLTRMX,PLTDMN,PLTDMX,IWHERE,IWHERR,NUMPLT
INTEGER*4 LX,LY,X,Y,LLX,LLY,PICPAG,GRPHPG,GRPAGE,IJ,L,B,R,T
INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,MODE
INTEGER*4 XNUM,YNUM,XLIST(36),YLIST(36),YS(0:36),INDS(0:36)
INTEGER*2 BIG,SMALL,RANGE2,BIG2,SMALL2,I16384,A256(LLX,LLY)
LOGICAL*2 NORMAL,DOBAR,MULTI,FANCY,M2,M3,USEWIN
COMMON /PLOTSZ/PLTRMN,PLTRMX,PLTDMN,PLTDMX,/PLTMLT/MULTI,FANCY,M2,M3
COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR
COMMON /PARPLZ/R500,/TWOPAR/PICPAG,GRPHPG,/PARNML/BIG,SMALL,RANGE2
COMMON /PARNM2/BIG2,SMALL2,MODE,I16384,/PARMLT/XNUM,YNUM,XLIST,YLIST
COMMON /AUTOSC/SCALES,/CONVQ2/IWHERE,IWHERR,/SCALEM/SCMESS
COMMON /TIKGRD/XMIN,XMAX,YMIN,YMAX,XOFF,XSCALE,YOFF,YSCALE
COMMON /WIN/USEWIN,L,B,RR,T
SAVE /PARMLT/,/PARPLZ/,/TWOPAR/,/PARNML/,/PARNM2/,/TIKGRD/,/AUTOSC/,/SCALE
M/,/CONVQ2/,/BLKPRM/
SAVE /PLTMLT/,/WIN/
NORMAL = .TRUE.
DOBAR = .FALSE.
GOTO 9999
*---------ENTRY PARPNX(A256,LLX,LLY)
NORMAL = .FALSE.
DOBAR = .FALSE.
GOTO 9999
*---------ENTRY BARPLX(A256,LLX,LLY)
DOBAR = .TRUE.
NORMAL = .TRUE.
9999 CONTINUE
LX = LLX
LY = LLY
GRPHPG = GRPAGE()
PICPAG = 1 - GRPHPG
Y = YLOC
IF (YLOC.GT.LY) THEN
CALL PARMKL
YLOC = MOD(YLOC,LY)
Y = YLOC
CALL PARMKL
ELSEIF (YLOC.LT.0) THEN
CALL PARMKL
YLOC = MOD(YLOC,LY) + LY
Y = YLOC
CALL PARMKL
ENDIF
CALL LEDSET(4)
RANGE = RANGE2
NUMPLT = YNUM + 1
YS(0) = YLOC
IST = 9 - YNUM
IF (IST.LE.0) IST = 1
INDS(0) = IST
DO 1 I = 1,YNUM
YS(I) = YLIST(I)
INDS(I) = IST + I
1 CONTINUE
* SORT INTO DESCENDING ORDER
DO 11 I = 0,YNUM-1

IY = YS(I)
DO 12 J = I+1,YNUM
IF (IY.LT.YS(J)) THEN
YS(I) = YS(J)
YS(J) = IY
IY = YS(I)
ENDIF
12
CONTINUE
11 CONTINUE
9001 CONTINUE
IFOO = INDST3(LX,2,YNUM+1)
IF (IFOO.GT.16384) THEN
PRINT *,'PARPLX: TOO MUCH DATA FOR PLOTTING, DECREMENTING'
YNUM = YNUM - 1
GOTO 9001
ENDIF
DELTA = 1.0D0/DBLE(LX)
DO 101 X = 1,LX
DO 201 I = 0,YNUM
R500(INDEX3(X,1,INDS(I))) = DELTA*X
IF (NORMAL) THEN
R500(INDEX3(X,2,INDS(I))) = (A256(X,YS(I))-SMALL)/RANGE
ELSE
R500(INDEX3(X,2,INDS(I))) = (BIG-A256(X,YS(I)))/RANGE
ENDIF
* CLIPPING
IF (R500(INDEX3(X,2,INDS(I))).GT.1.0) R500(INDEX3(X,2,INDS(I))) =
1.0
IF (R500(INDEX3(X,2,INDS(I))).LT.0.0) R500(INDEX3(X,2,INDS(I))) =
0.0
201
CONTINUE
101 CONTINUE
XOFF = 0.0
YOFF = 0.0
XMIN = 0.0
YMIN = 0.0
XMAX = 1.0
YMAX = 1.0
XSCALE = 0.995
YSCALE = 0.990
SCALES(1,1) = XOFF + 3.0/(765.0*XSCALE)
SCALES(2,1) = XSCALE
SCALES(1,2) = YOFF + 3.0/(477.0*YSCALE)
SCALES(2,2) = YSCALE
IF (FANCY.OR.MULTI) THEN
WRITE (SCMESS,'(A,I3,A,I3,A,A,I5,A,I5)',ERR=123)
&
' @Y= ',YLOC,' with ',LX,' points;',' Top: ',BIG,' Baseline: ',SMALL
ELSE
WRITE (SCMESS,'(A,I5,A,I5,A,I3,A,I3,A)',ERR=123)
&
'Top: ',BIG,' Baseline: ',SMALL,' @Y= ',YLOC,' with ',LX,' points.'
ENDIF
123 CONTINUE
CALL LEDSET(5)
SCSAVE = SCMESS
PLTDMN = 1
PLTDMX = LX
PLTRMN = SMALL
PLTRMX = BIG
IJ = INDEX3(1,1,IST)
IF (FANCY.OR.MULTI) THEN

CALL FULLSC
CALL GRCLS
*
ELSEIF (USEWIN) THEN
*
CALL PLTWIN(L,B,R,T)
*
CALL GRCLSW
ENDIF
IF (FANCY) THEN
IF (DOBAR) THEN
CALL BANWY0(R500(IJ),LX,NUMPLT)
ELSE
CALL FANWY0(R500(IJ),LX,NUMPLT)
ENDIF
ELSEIF (DOBAR.AND.MULTI) THEN
IF (M3) THEN
CALL BRNW49(R500(IJ),LX,NUMPLT)
ELSEIF (M2) THEN
CALL MNWBL0(R500(IJ),LX,-NUMPLT)
ELSE
CALL MNWBL0(R500(IJ),LX,NUMPLT)
ENDIF
IF (NUMPLT.EQ.1.AND..NOT.USEWIN) THEN
IF (.NOT.M3) SCMESS = SCSAVE
CALL PLXTMS
ENDIF
ELSEIF (DOBAR) THEN
CALL BARGNM(R500(IJ),LX)
SCMESS = SCSAVE
IF (.NOT.USEWIN) CALL PLXTMS
ELSEIF (MULTI.AND.NUMPLT.GT.1) THEN
IF (M3) THEN
CALL PLNW49(R500(IJ),LX,NUMPLT)
ELSEIF (M2) THEN
CALL MNWPL0(R500(IJ),LX,-NUMPLT)
ELSE
CALL MNWPL0(R500(IJ),LX,NUMPLT)
ENDIF
*
IF (.NOT.M3) SCMESS = SCSAVE
*
CALL PLXTMS
ELSE
CALL PL0TNW(R500(IJ),LX,NUMPLT)
ENDIF
SCMESS = SCSAVE
RETURN
END
*---------------------------------------------------------------------SUBROUTINE PARPLY(A256,LLX,LLY)
CHARACTER*78 SCMESS,SCSAVE
REAL*4 XMIN,XMAX,YMIN,YMAX,XOFF,XSCALE,YOFF,YSCALE,SCALES(2,2)
REAL*4 R256(16384),R500(8192)
INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,PICPAG,GRPHPG,GRPAGE
INTEGER*4 XNUM,YNUM,XLIST(36),YLIST(36),XS(0:36),INDS(0:36),NUMPLT
INTEGER*4 LX,LY,X,Y,LLX,LLY,MODE,IWHERE,IWHERR,IJ,L,B,R,T
INTEGER*4 INDEX3,PLTRMN,PLTRMX,PLTDMN,PLTDMX
INTEGER*2 A256(LLX,LLY),BIG,SMALL,RANGE2,BIG2,SMALL2,I16384
LOGICAL*2 NORMAL,ROTATE,OVRLAY,MULTI,FANCY,DOBAR,M2,M3,USEWIN
EQUIVALENCE (R256(1),R500(1))
COMMON /CONVQ2/IWHERE,IWHERR,/SCALEM/SCMESS,/AUTOSC/SCALES
COMMON /PLOTSZ/PLTRMN,PLTRMX,PLTDMN,PLTDMX
COMMON /TIKGRD/XMIN,XMAX,YMIN,YMAX,XOFF,XSCALE,YOFF,YSCALE
COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,/PARPLZ/R256

COMMON /PARNML/BIG,SMALL,RANGE2,/PARNM2/BIG2,SMALL2,MODE,I16384
COMMON /TWOPAR/PICPAG,GRPHPG,/PLTMLT/MULTI,FANCY,M2,M3
COMMON /PARMLT/XNUM,YNUM,XLIST,YLIST,/WIN/USEWIN,L,B,RR,T
SAVE /PARMLT/,/PARPLZ/,/TWOPAR/,/PARNML/,/PARNM2/,/TIKGRD/,/AUTOSC/,/SCALE
M/,/CONVQ2/,/BLKPRM/
SAVE /PLTMLT/,/WIN/
NORMAL = .TRUE.
ROTATE = .FALSE.
OVRLAY = .FALSE.
DOBAR = .FALSE.
GOTO 9999
*---------ENTRY PARPNY(A256,LLX,LLY)
OVRLAY = .FALSE.
NORMAL = .FALSE.
ROTATE = .FALSE.
GOTO 9999
*---------ENTRY PARPRY(A256,LLX,LLY)
OVRLAY = .FALSE.
NORMAL = .TRUE.
ROTATE = .TRUE.
GOTO 9999
*---------ENTRY PARPOY(A256,LLX,LLY)
OVRLAY = .TRUE.
NORMAL = .TRUE.
ROTATE = .TRUE.
GOTO 9999
*---------ENTRY BARPNY(A256,LLX,LLY)
OVRLAY = .FALSE.
NORMAL = .FALSE.
ROTATE = .FALSE.
DOBAR = .TRUE.
GOTO 9999
*---------ENTRY BARPLY(A256,LLX,LLY)
OVRLAY = .FALSE.
NORMAL = .TRUE.
ROTATE = .FALSE.
DOBAR = .TRUE.
9999 CONTINUE
LX = LLX
LY = LLY
GRPHPG = GRPAGE()
PICPAG = 1 - GRPHPG
X = XLOC
IF (X.GT.LX) THEN
CALL PARMKL
XLOC = MOD(XLOC,LX)
CALL PARMKL
X = XLOC
ELSEIF (X.LT.0) THEN
CALL PARMKL
XLOC = MOD(XLOC,LX) + LX
CALL PARMKL
X = XLOC
ENDIF
CALL LEDSET(4)

RANGE = RANGE2
NUMPLT = XNUM + 1
XS(0) = XLOC
IST = 9 - XNUM
IF (IST.LE.0) IST = 1
INDS(0) = IST
DO 1 I = 1,XNUM
XS(I) = XLIST(I)
INDS(I) = IST + I
1 CONTINUE
* SORT INTO DESCENDING ORDER
DO 11 I = 0,XNUM-1
IX = XS(I)
DO 12 J = I+1,XNUM
IF (IX.LT.XS(J)) THEN
XS(I) = XS(J)
XS(J) = IX
IX = XS(I)
ENDIF
12
CONTINUE
11 CONTINUE
IF (ROTATE) THEN
INDX = 2
INDY = 1
ELSE
INDX = 1
INDY = 2
ENDIF
9001 CONTINUE
IFOO = INDST3(LY,2,XNUM+1)
IF (IFOO.GT.16384) THEN
PRINT *,'PARPLY: TOO MUCH DATA FOR PLOTTING, DECREMENTING '
XNUM = XNUM - 1
GOTO 9001
ENDIF
DELTA = 1.0D0/DBLE(LY)
DO 101 Y = 1,LY
DO 201 I = 0,XNUM
R256(INDEX3(Y,INDX,INDS(I))) = DELTA*Y
IF (NORMAL) THEN
R256(INDEX3(Y,INDY,INDS(I))) = (A256(XS(I),Y)-SMALL)/RANGE
ELSE
R256(INDEX3(Y,INDY,INDS(I))) = (BIG-A256(XS(I),Y))/RANGE
ENDIF
* CLIPPING
IF (R256(INDEX3(Y,INDY,INDS(I))).GT.1.0) R256(INDEX3(Y,INDY,INDS(I
))) = 1.0
IF (R256(INDEX3(Y,INDY,INDS(I))).LT.0.0) R256(INDEX3(Y,INDY,INDS(I
))) = 0.0
201
CONTINUE
101 CONTINUE
XOFF = 0.0
YOFF = 0.0
XMIN = 0.0
YMIN = 0.0
XMAX = 1.0
YMAX = 1.0
XSCALE = 0.995
YSCALE = 0.990
SCALES(1,1) = XOFF + 3.0/(765.0*XSCALE)

SCALES(2,1) = XSCALE
SCALES(1,2) = YOFF + 3.0/(477.0*YSCALE)
SCALES(2,2) = YSCALE
IF (FANCY.OR.MULTI) THEN
WRITE (SCMESS,'(A,I3,A,I3,A,A,I5,A,I5)',ERR=123)
&
' @Y= ',XLOC,' WITH ',LY,' POINTS;',' TOP: ',BIG,' BASELINE: ',SMALL
ELSE
WRITE (SCMESS,'(A,I5,A,I5,A,I3,A,I3,A)',ERR=123)
&
'Top: ',BIG,' Baseline: ',SMALL,' @X= ',XLOC,' with ',LY,' points '
ENDIF
123 CONTINUE
SCSAVE = SCMESS
CALL LEDSET(5)
PLTDMN = 1
PLTDMX = LY
PLTRMN = SMALL
PLTRMX = BIG
SCSAVE = SCMESS
IJ = INDEX3(1,1,IST)
IF (.NOT.OVRLAY) THEN
IF (FANCY.OR.MULTI) THEN
CALL FULLSC
CALL GRCLS
*
ELSEIF (USEWIN) THEN
*
CALL PLTWIN(L,B,R,T)
*
CALL GRCLSW
ENDIF
ENDIF
IF (FANCY.AND.OVRLAY) THEN
CALL FANWC0(R256(IJ),LY,NUMPLT)
ELSEIF (FANCY) THEN
IF (DOBAR) THEN
CALL BANWY0(R256(IJ),LY,NUMPLT)
ELSE
CALL FANWY0(R256(IJ),LY,NUMPLT)
ENDIF
ELSEIF (DOBAR.AND.MULTI) THEN
IF (M3) THEN
CALL BRNW49(R256(IJ),LY,NUMPLT)
ELSEIF (M2) THEN
CALL MNWBL0(R256(IJ),LY,-NUMPLT)
ELSE
CALL MNWBL0(R256(IJ),LY,NUMPLT)
ENDIF
IF (NUMPLT.EQ.1.AND..NOT.USEWIN) THEN
IF (.NOT.M3) SCMESS = SCSAVE
CALL PLXTMS
ENDIF
ELSEIF (DOBAR) THEN
CALL BARGNM(R256(IJ),LY)
SCMESS = SCSAVE
IF (.NOT.USEWIN) CALL PLXTMS
ELSEIF (MULTI.AND.NUMPLT.GT.1.AND.OVRLAY) THEN
IF (M2.OR.M3) THEN
CALL MNWPC0(R256(IJ),LY,-NUMPLT)
ELSE
CALL MNWPC0(R256(IJ),LY,NUMPLT)
ENDIF
ELSEIF (MULTI.AND.NUMPLT.GT.1) THEN
IF (M3) THEN

CALL PLNW49(R256(IJ),LY,NUMPLT)
ELSEIF (M2) THEN
CALL MNWPL0(R256(IJ),LY,-NUMPLT)
ELSE
CALL MNWPL0(R256(IJ),LY,NUMPLT)
ENDIF
*
IF (.NOT.M3) SCMESS = SCSAVE
*
CALL PLXTMS
ELSEIF (OVRLAY) THEN
CALL PL0TNC(R256(IJ),LY,NUMPLT)
ELSE
CALL PL0TNW(R256(IJ),LY,NUMPLT)
ENDIF
SCMESS = SCSAVE
RETURN
END
*---------------------------------------------------------------------$SEGMENT _XGRAPH_
*compiler is directed to place object code in segment _XGRAPH_
*
SUBROUTINE NORM2L(II256,LX,LY)
INTEGER*4 CUMUL(0:16383),IGNOR,MODE,KADDR,ILX,ILY
INTEGER*2 BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383)
COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384
COMMON /PARCUM/IGNOR,PROFIL,CUMUL
SAVE /PARCUM/,/PARNML/,/PARNM2/
EXTERNAL N0RML2,CALL3,NORML2
*
*
IGNORE = IGNOR
ILX = KADDR(LX)
ILY = KADDR(LY)
CALL CALL3(NORML2,II256,ILX,ILY)
RETURN
END
*---------------------------------------------------------------------SUBROUTINE NORML2(A256,LX,LY)
INTEGER*4 CUMUL(0:16383),IGNORE,IGNOR,MODE
INTEGER*2 BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383)
LOGICAL*4 CHKADR
LOGICAL*1 FIRST
COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384
COMMON /PARCUM/IGNOR,PROFIL,CUMUL
SAVE /PARCUM/,/PARNML/,/PARNM2/,FIRST
DATA FIRST/.TRUE./
*
IGNORE = IGNOR
9000 CONTINUE
CALL N0RML2(A256,LX,LY)
IF (.NOT.FIRST) CALL RNORML(IGNORE,LX,LY)
IF (FIRST) THEN
BIG2 = BIG
BIG = (2*BIG + SMALL)/3
SMALL = (BIG2 + 2*SMALL)/3
FIRST = .FALSE.
GOTO 9000
ENDIF
RETURN
END
*---------------------------------------------------------------------SUBROUTINE NNRML2(A256,LX,LY)

CHARACTER*8 MESS,THEHEX,HEXOF
CHARACTER*8 HAPS(32)
CHARACTER*1 TC,TCALGN(2)
INTEGER*4 LX,LY,KADDR,PICPAG,GRPHPG,MODE,J16384,IWHERE,IWHERR,MSK14
INTEGER*4 BSERCH,B4GIT,SM4IT,LEN,LEN2,LENL,LENH,BHSRCH,BLSRCH
INTEGER*4 IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512,FPEND,FMEND
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,AFMTYP,LNS(0:7),IAPS(32)
INTEGER*4 CUMUL(0:16383),IGNORE,IGNOR,LENS(32)
INTEGER*2 BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383),DEFBUF
INTEGER*2 A256(LX,LY),FWPEEK,IT2,I2AND2,MASK,B2GIT,SM2IT
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*4 FCKD,SKIPIT,NOT14,KILLIT,LFOO,CHKADR,CHKADI
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,PAUSES
LOGICAL*2 AVALID,AACORR,BADBUF
LOGICAL*1 NORMAL,MASKOK,DOMASK,FIX0,ISRHO,ISNTE,ISZRC,ISNORM,ISE,ISQ
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /NTRVN/ ABORT,ESCAPE,INTRPT,/KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /CONVQ2/IWHERE,IWHERR,/IPPENC/SKIPIT,/PARB14/NOT14,KILLIT
COMMON /TWOPAR/PICPAG,GRPHPG,/PARNML/BIG,SMALL,RANGE
COMMON /PARNM2/BIG2,SMALL2,MODE,I16384,/BUFDEF/DEFBUF
COMMON /PARCUM/IGNOR,PROFIL,CUMUL,/PAWS/PAUSES
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
SAVE /KEYGET/,/SHFSTA/,/NTRVN/,/OMAPR2/,/CONVQ2/,/IPPENC/,/PARB14/,/AMPLS/
SAVE /PARCUM/,/PARNML/,/PARNM2/,/TWOPAR/,/PAWS/,/OMACNT/,/OMATYP/,/BUFDEF/
SAVE IFOO,DOMASK,FIX0,ISRHO,ISNTE,ISZRC,ISNORM,ISE
EXTERNAL HEXOF,KADDR,SETPG0,WAIT,ANDIT,IANDIT,IPRFIT,IB2GIT,ISM2IT
EXTERNAL PRFIT,B2GIT,SM2IT,SUMIT,BLSRCH,BHSRCH,CCNSL0,PRFIM,IPRFIM
EXTERNAL CHKADR,CHKADI,IPRF1T,IPRF1M,PRF1T,PRF1M
SAVE
DATA DOMASK/.TRUE./,FIX0/.TRUE./
NORMAL = .TRUE.
GOTO 4445
*---------ENTRY N0RML2(A256,LX,LY)
NORMAL = .FALSE.
4445 CONTINUE
IF (DEFBUF.GE.1.AND.DEFBUF.LE.31) THEN
I = TYPS(DEFBUF)
ISRHO = I.GE.15 .AND. I.LE.20 .AND. LENXS(DEFBUF).GT.0 .AND. LENYS(DEF
BUF).GT.0
ISNTE = I.LT.9
ISE = I.GE.9 .AND. I.LE.14
ISZRC = I.EQ.1 .OR. I.EQ.4 .OR. I.EQ.7 .OR. I.EQ.8
ISNORM = I.EQ.3 .OR. I.EQ.4 .OR. I.EQ.8
ISQ = I.EQ.6 .OR.I.EQ.-2
ELSE
ISRHO = .FALSE.
ISNTE = .TRUE.
ISE = .FALSE.
ISZRC = .FALSE.
ISNORM = .FALSE.
ISQ = .FALSE.
ENDIF
BADBUF = .FALSE.
IF (.NOT.CHKADI(A256(1,1))) THEN

CALL USEPG0
CALL GRCLS
CALL BEEP
PRINT *,'NORML2: Bad buffer address, is less than LASTXX'
CALL FLASHB
CALL WAIT(3.0)
BADBUF = .TRUE.
ENDIF
IF (AVALID.OR.AMARK.EQ.APOINT.OR.ALEN.NE.0) THEN
MASKOK = LX.EQ.LENXS(5) .AND. LY.EQ.LENYS(5)
MASKOK = MASKOK .AND. ( (TYPS(5).EQ.0) .OR. (TYPS(5).EQ.1) .OR.
&
(TYPS(5).EQ.5) .OR. (TYPS(5).EQ.7) )
I = KADDR(A256(1,1))
MASKOK = MASKOK .AND. ( I.LT.(AMARK-1024) .OR. I.GT.(AMARK+1024) )
ELSE
MASKOK = .FALSE.
ENDIF
IM = IAPS(5)
IWHERE = KADDR(A256(1,1))
THEHEX = HEXOF(IWHERE)
FCKD = IWHERE.LT.65536 .OR. IWHERE.GT.$300000
FCKD = FCKD .OR. BADBUF
IF (FCKD) THEN
CALL SETPG0
PRINT *,'NORML2: IWHERE = ',IWHERE,' IA512 = ',IA512
IA128 = IWHERE
WRITE (11,'(A,I8,A,I8)',ERR=1885) 'NORML2: IWHERE = ',IWHERE,' IA512
= ',IA512
1885
CONTINUE
CALL WAIT(1.0)
ENDIF
IGNORE = IGNOR
MASK = $7FFF
MSK14 = $3FFF3FFF
NMSK14 = $C000C000
LEN = LX*LY*2
LEN2 = LEN
IF (IGNORE.LT.4) IGNORE = 100
IF (KILLIT.AND..NOT.BADBUF) THEN
IF (.NOT.FCKD) THEN
CALL ANDIT(A256(1,1),LEN2,MSK14)
ELSE
CALL IANDIT(IA256,LEN2,MSK14)
ENDIF
ENDIF
9876 CONTINUE
LEN = LX*LY*2
IF (SKIPIT) LEN = LX*(LY-2)*2
LEN2 = LEN
IF (LEN.LE.0) THEN
CALL SETPG0
PRINT *,'NORML2: LEN<=0!! ',LEN,' SETTING TO 28000'
CALL PAUSE(' ')
LEN = 28000
ENDIF
PROFIL(16383) = 0
IF (FCKD) THEN
IF (SKIPIT) THEN
IA = IA256 + LX*2
IF (FIX0.AND.DOMASK.AND.MASKOK) THEN

CALL IPRFIM(IA,IM,LEN2,PROFIL(0))
ELSEIF (FIX0) THEN
CALL IPRFIT(IA,LEN2,PROFIL(0))
ELSEIF (DOMASK.AND.MASKOK) THEN
CALL IPRF1M(IA,IM,LEN2,PROFIL(0))
ELSE
CALL IPRF1T(IA,LEN2,PROFIL(0))
ENDIF
LEN2 = LEN
BIG2 = IB2GIT(IA,LEN2)
LEN2 = LEN
BIG = IL2GIT(IA,LEN2)
LEN2 = LEN
SMALL2 = ISM2IT(IA,LEN2)
ELSE
IF (FIX0.AND.DOMASK.AND.MASKOK) THEN
CALL IPRFIM(IA256,IM,LEN2,PROFIL(0))
ELSEIF (FIX0) THEN
CALL IPRFIT(IA256,LEN2,PROFIL(0))
ELSEIF (DOMASK.AND.MASKOK) THEN
CALL IPRF1M(IA256,IM,LEN2,PROFIL(0))
ELSE
CALL IPRF1T(IA256,LEN2,PROFIL(0))
ENDIF
LEN2 = LEN
BIG2 = IB2GIT(IA256,LEN2)
LEN2 = LEN
BIG = IL2GIT(IA256,LEN2)
LEN2 = LEN
SMALL2 = ISM2IT(IA256,LEN2)
ENDIF
ELSE
IF (SKIPIT) THEN
IA = KADDR(A256(1,2))
IF (FIX0.AND.DOMASK.AND.MASKOK) THEN
CALL IPRFIM(IA,IM,LEN2,PROFIL(0))
ELSEIF (FIX0) THEN
CALL IPRFIT(IA,LEN2,PROFIL(0))
ELSEIF (DOMASK.AND.MASKOK) THEN
CALL IPRF1M(IA,IM,LEN2,PROFIL(0))
ELSE
CALL IPRF1T(IA,LEN2,PROFIL(0))
ENDIF
LEN2 = LEN
BIG2 = B2GIT(A256(1,2),LEN2)
LEN2 = LEN
BIG = L2GIT(A256(1,2),LEN2)
LEN2 = LEN
SMALL2 = SM2IT(A256(1,2),LEN2)
ELSE
IA = KADDR(A256(1,1))
IF (FIX0.AND.DOMASK.AND.MASKOK) THEN
CALL IPRFIM(IA,IM,LEN2,PROFIL(0))
ELSEIF (FIX0) THEN
CALL IPRFIT(IA,LEN2,PROFIL(0))
ELSEIF (DOMASK.AND.MASKOK) THEN
CALL IPRF1M(IA,IM,LEN2,PROFIL(0))
ELSE
CALL IPRF1T(IA,LEN2,PROFIL(0))
ENDIF

LEN2 = LEN
BIG2 = B2GIT(A256(1,1),LEN2)
LEN2 = LEN
BIG = L2GIT(A256(1,1),LEN2)
LEN2 = LEN
SMALL2 = SM2IT(A256(1,1),LEN2)
ENDIF
ENDIF
IF (SMALL2.LT.0) SMALL2 = 0
IF (SMALL2.GT.16383) SMALL2 = 0
IF (SMALL2.GT.BIG) SMALL2 = 0
IF (BIG2.GE.16383.AND.ISNTE) BIG2 = 16382
*
IF (BIG.GT.SMALL2.AND.BIG2.GT.BIG) BIG2 = MIN(BIG,16382)
IFOO = 0
IF (NORMAL) GOTO 4444
*---------ENTRY RN0RML(LX,LY)
IFOO = PROFIL(0)
PROFIL(0) = 0
IF (DEFBUF.GE.1.AND.DEFBUF.LE.31) THEN
I = TYPS(DEFBUF)
ISRHO = I.GE.15 .AND. I.LE.20 .AND. LENXS(DEFBUF).GT.0 .AND. LENYS(DEF
BUF).GT.0
ISNTE = I.LT.9
ISE = I.GE.9 .AND. I.LE.14
ISZRC = I.EQ.1 .OR. I.EQ.4 .OR. I.EQ.7 .OR. I.EQ.8
ISNORM = I.EQ.3 .OR. I.EQ.4 .OR. I.EQ.8
ISQ = I.EQ.6 .OR.I.EQ.-2
ELSE
ISRHO = .FALSE.
ISNTE = .TRUE.
ISE = .FALSE.
ISZRC = .FALSE.
ISNORM = .FALSE.
ISQ = .FALSE.
ENDIF
4444 CONTINUE
J16384 = 16384
MODE = B2GIT(PROFIL(0),J16384)
I16384 = J16384 - 1
IF (PROFIL(0).GT.0.AND.PROFIL(1).LT.0) THEN
I = PROFIL(1) + 65536
I = MOD(I,65536) + PROFIL(0) + 1
PROFIL(0) = $FFFF
PROFIL(1) = I
ENDIF
CALL SUMIT(PROFIL(0),CUMUL(0))
I = LX*LY - CUMUL(16383)
IF (I.GT.10) CALL ADDIT(CUMUL(0),16384,I)
**
IF (PROFIL(0).LT.0.OR.CUMUL(0).LT.0) THEN
**
I = PROFIL(0) + 65536
**
I = MOD(I,65536) - 32767
**
I = MOD(I,65536)
**
PROFIL(0) = 32767
**
I = PROFIL(1) + 65536 + I
**
I = MOD(I,65536)
**
IF (I.LT.32768.AND.I.GT.0) THEN
**
PROFIL(1) = I
**
I = 0
**
ELSEIF (I.GT.0) THEN

**
**
**
**
**
**

PROFIL(1) = 32767
I = I - 32767
ENDIF
CALL SUMIT(PROFIL(0),CUMUL(0))
IF (I.GT.0) CALL ADDIT(CUMUL(0),16384,I)
ENDIF
IF (CUMUL(16383).GT.CUMUL(16382)) CUMUL(16383) = CUMUL(16382)
LEN = LX*LY*2
IF (SKIPIT) LEN = LX*(LY-2)*2
LENL = LEN/IGNORE
IF (LENL.LE.0) LENL = 1
LENH = LEN - LENL - IFOO
SMALL = BLSRCH(CUMUL(0),LENL)
BIG = BHSRCH(CUMUL(0),LENH)
IF (SMALL.LT.SMALL2) SMALL = SMALL2
IF (BIG.GT.BIG2) BIG = BIG2
IT = MAX((BIG - I16384),1)
ISM = MAX(0,I16384-IT)
IF (SMALL.GE.BIG) THEN
SMALL = MIN(0+SMALL,(SMALL+SMALL2)/2,ISM)
J = MIN(16383,I16384+IT)
BIG = MAX(0+BIG,(BIG+BIG2)/2,J)
ENDIF
IF (SMALL.LT.0) SMALL = 0
IF (SMALL.GT.I16384) SMALL = ISM
IF (BIG.GE.$3FFF) THEN
LENH = LEN - LEN/IGNORE
IF (LENH.EQ.LEN) LENH = LEN - 1
BIG = BHSRCH(CUMUL(0),LENH)
IF (BIG.GT.BIG2) BIG = BIG2
*
IF (BIG.GE.$3FFF) BIG = $3FFE
ENDIF
IF (BIG.GE.$3FFF.AND.ISNTE) BIG = $3FFE
RANGE = BIG - SMALL
IF (RANGE.LT.0.AND.NOT14) THEN
NOT14 = .FALSE.
GOTO 9876
ELSEIF (RANGE.LT.0) THEN
SMALL = 0
ENDIF
PAUSES = .FALSE.
CALL ISNTRP
9999 CONTINUE
IA128 = IA512
MESS = 'N0RML2: '
CALL CCNSL0
9997 CONTINUE
ISM = SMALL
IBG = BIG
IF (ISQ) THEN
ISM2 = SMALL
IBG2 = BIG
ENDIF
IF (ISRHO.OR.ISE.OR.ISQ) THEN
IB = 0
IS = 16383
I = (2 + LX)/2
IF (ISE.OR.ISQ) THEN
DO 9401 J = 2,LY-1
II = A256(I,J)

IF (II.EQ.0) II = IB
IB = MAX(IB,II)
IS = MIN(IS,II)
9401
CONTINUE
ENDIF
J = (2 + LY)/2
JU = (2 + 2*LY)/3
JL = (3 + LY)/3
DO 9402 II = 2,LX-1
IU = A256(II,JU)
IL = A256(II,JL)
I = A256(II,J)
IF (IU.EQ.0) IU = IB
IF (IL.EQ.0) IL = IS
IF (I.EQ.0) I = IB
IB = MAX(IB,I,IU,IL)
IS = MIN(IS,I,IU,IL)
9402
CONTINUE
*
ISM = SMALL
*
IBG = BIG
SMALL = IS
BIG = IB
*
I = MAX(8192 - SMALL ,1)
*
J = MAX(BIG - 8192 ,1)
*
K = MAX(I,J)
*
L = (I + J + K)/3
*
I = (I+L)/2
*
J = (J+L)/2
*
SMALL = 8192 - I
*
BIG = 8192 + J
*
RANGE = BIG - SMALL
*
IF (RANGE.LT.0) THEN
*
SMALL = ISM
*
RANGE = BIG - SMALL
*
ENDIF
ENDIF
IF (ISNORM) THEN
IF (BIG2.GT.16383) BIG2 = 16383
IF (BIG.LT.BIG2) BIG = (BIG + BIG2)/2
ENDIF
IF (ISZRC) THEN
IF (SMALL2.GT.0) THEN
IF (SMALL.GT.SMALL2) THEN
SMALL = (3*SMALL2 + SMALL)/4
SMALL2 = 0
ELSE
I = SMALL2
SMALL2 = SMALL
SMALL = I
ENDIF
ELSE
SMALL = SMALL/2
ENDIF
ENDIF
IF (ISZRC.AND.ISNORM) THEN
IT = 16384 - BIG
SMALL = (MIN(SMALL,IT) + SMALL) / 2
BIG = (MAX(16384-SMALL,BIG) + 2*BIG)/3
IT = 16384 - BIG
SMALL = (2*MIN(SMALL,IT) + SMALL) / 3

ENDIF
RANGE = BIG - SMALL
IF (RANGE.LT.0) THEN
IF (ISM.LT.SMALL) THEN
SMALL = ISM
ELSEIF (IBG.GT.BIG) THEN
BIG = IBG
ELSE
SMALL = 0
ENDIF
RANGE = BIG - SMALL
IF (RANGE.LE.0) BIG = SMALL + 10
ELSEIF (RANGE.LT.3) THEN
RANGE = 3
IF (SMALL.GT.0) SMALL = SMALL - 1
BIG = SMALL + RANGE
ELSEIF (RANGE.LT.5) THEN
RANGE = 5
IF (SMALL.GT.1) THEN
SMALL = SMALL - 2
ELSEIF (SMALL.GT.0) THEN
SMALL = 0
ENDIF
BIG = SMALL + RANGE
ELSEIF (RANGE.LT.8) THEN
RANGE = 8
IF (SMALL.GT.1) THEN
SMALL = SMALL - 2
ELSEIF (SMALL.GT.0) THEN
SMALL = 0
ENDIF
BIG = SMALL + RANGE
ELSEIF (RANGE.LT.10) THEN
RANGE = 10
IF (SMALL.GT.2) THEN
SMALL = SMALL - 3
ELSEIF (SMALL.GT.0) THEN
SMALL = 0
ENDIF
BIG = SMALL + RANGE
ENDIF
WRITE (11,'(A,A,I5,A,I5,A,I6,A,I3,A,I3,3X,A)',ERR=9998) MESS,'Large ',BIG,
& ', Small ',SMALL,' Ign:',IGNORE,' SCAN SIZE: ',LX,' x ',LY,THEHEX
9998 CONTINUE
RETURN
*---------ENTRY RNORML(IGN2,LX,LY)
IF (DEFBUF.GE.1.AND.DEFBUF.LE.31) THEN
I = TYPS(DEFBUF)
ISRHO = I.GE.15 .AND. I.LE.20 .AND. LENXS(DEFBUF).GT.0 .AND. LENYS(DEF
BUF).GT.0
ISNTE = I.LT.9
ISE = I.GE.9 .AND. I.LE.14
ISZRC = I.EQ.1 .OR. I.EQ.4 .OR. I.EQ.7 .OR. I.EQ.8
ISNORM = I.EQ.3 .OR. I.EQ.4 .OR. I.EQ.8
ISQ = I.EQ.6 .OR.I.EQ.-2
ELSE
ISRHO = .FALSE.
ISNTE = .TRUE.
ISE = .FALSE.

ISZRC = .FALSE.
ISNORM = .FALSE.
ISQ = .FALSE.
ENDIF
MESS = 'RNORML: '
IGNORE = IGN2
LEN = LX*LY
IF (SKIPIT) LEN = LX*(LY-2)
LENL = LEN/IGNORE
IF (LENL.LE.0) LENL = 1
LENH = LEN - LENL - IFOO
SMALL = BLSRCH(CUMUL(0),LENL)
BIG = BHSRCH(CUMUL(0),LENH)
IF (SMALL.LT.SMALL2) SMALL = SMALL2
IF (BIG.GT.BIG2) BIG = BIG2
IT = MAX((BIG - I16384),1)
ISM = MAX(1,I16384-IT)
IF (SMALL.GE.BIG) THEN
SMALL = MIN(0+SMALL,(SMALL+SMALL2)/2,ISM)
J = MIN(16383,I16384+IT)
BIG = MAX(0+BIG,(BIG+BIG2)/2,J)
ENDIF
IF (SMALL.GE.BIG) THEN
SMALL = MIN(ISM,0+SMALL2)
BIG = MAX(0+BIG,0+BIG2)
ENDIF
IF (SMALL.LT.0) SMALL = 0
IF (SMALL.GT.I16384) SMALL = ISM
IF (BIG.GT.$3FFF.AND.ISNTE) BIG = $3FFE
IF (BIG.GT.BIG2) BIG = BIG2
IF (SMALL.GE.BIG) THEN
SMALL = MIN(0+SMALL,0+SMALL2,0)
BIG = MAX(0+BIG,0+BIG2)
IF (ISNTE) BIG = MIN(16383,0+BIG)
ENDIF
RANGE = BIG - SMALL
GOTO 9997
*
ENTRY NSTMSK(LFOO)
DOMASK = LFOO
RETURN
*
ENTRY NSTFX0(LFOO)
FIX0 = LFOO
RETURN
END
*---------------------------------------------------------------------$SEGMENT %_LPLOT_
*compiler is directed to place object code in segment %_LPLOT_
*
SUBROUTINE PLTHLP
CHARACTER*75 SIZEMS(2)
CHARACTER*1 TC,TCALGN(2)
INTEGER*4 PLTRMN,PLTRMX,PLTDMN,PLTDMX,MODE,PICPAG,GRPHPG,DSPAGE
INTEGER*4 IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
INTEGER*2 BIG,SMALL,RANGE,BIG2,SMALL2,I16384
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET,FO
OB
LOGICAL*1 DOIT

EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /TWOPAR/PICPAG,GRPHPG,/PLOTSZ/PLTRMN,PLTRMX,PLTDMN,PLTDMX
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/NTRVN/ABORT,ESCAPE,INTRPT
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
SAVE /KEYGET/,/SHFSTA/,/NTRVN/
DOIT = .FALSE.
1 CONTINUE
GRPHPG = DSPAGE()
CALL GCRCLS
PLTRMN = 0
PLTRMX = 0
PLTDMN = 0
PLTDMX = 0
IF (.NOT.DOIT) THEN
PRINT *,' '
PRINT *,'
After data is plotted, you can manipulate and (re-) displ
ay'
PRINT *,' it in a variety of forms. A SUMMARY of commonly used comman
ds'
PRINT
PRINT
PRINT
PRINT
PRINT

*,' is displayed on the next screen.


When operations are in '
*,' progress the LEDS on the keypad will cycle, ALL LEDS go on '
*,' when the operation is complete. '
*,'
'
*,'
When the system generates plots, listings, profiles &c th

e'
PRINT *,' summary help screen is overwritten. To redisplay summary he
lp'
PRINT *,' type ? .

There are a few additional, rarely used command

s'
PRINT *,' which are not listed in the summary help screen, please refe
r'
PRINT *,' to the OMA Data Acquisition and Display USER''s Manual. '
PRINT *,'
'
PRINT *,'
NOTE - There are a few commands that are not yet fully '
PRINT *,' working, they are NOT listed, most require really obscure'
PRINT *,' combinations of keys. Don''t go looking for commands by '
PRINT *,' randomly pressing keys -- you may not like the result.'
PRINT *,'
'
PRINT *,' '
PRINT *,' ** MORE ** any key to continue, Esc to escape'
11
CONTINUE
CALL ISNTRP
IF (ERR.NE.0) GOTO 11
IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.SCAN.EQ.1) RETURN
CALL CRCLS
ENDIF
PRINT *,' After data is plotted, you can: '
PRINT *,'
REVERSE the image
w/ Ctrl R '
PRINT *,'
PLOT it AGAIN w/new settings
w/ Ctrl A'
PRINT *,'
PRINT out displayed image
w/ PrtSc (*)'
PRINT *,'
proceed to Next part
w/ Ctrl N (^C)'
PRINT *,'
switch displayed page
w/ F1 .. F10'
PRINT *,'
get DIRECTORY listings of (frames Scrl ^F),(any Scrl D)'
PRINT *,'
IsoTrace (plot ISOINTENSITY contours) w/ Ctrl S'
PRINT *,'
PLOT intensity vs. position
w/ Scrl A (Scrl P)'
PRINT *,'
Scrl N - plots iNverse, Scrl R - plots y Rotated'
PRINT *,'
Plot Both X and Y lines
w/ Scrl B'

PRINT *,'
BAR GRAPH - @ (!)
Scrl L (^L) - LIST VALUES'
PRINT *,'
Choose horizontal or vertical for plot w/ H or V'
PRINT *,'
choose line(s) for plot using cursor controls'
PRINT *,'
Mark a Line (to choose multiples)
w/ Alt L'
PRINT *,'
Unmark lines (Erase ALL lines Alt E) w/ Alt U'
PRINT *,'
Get an intensity PROFILE (%, #, $, ^P)w/ Alt P'
PRINT *,'
List part of an intensity profile Scrl % or Scrl #'
PRINT *,'
STORE FRAME to disk
w/ Scrl " '
PRINT *,' HELP ?
ROTATE IMAGE Scrl ^M
Set TAILS Scrl T '
IF (DOIT) THEN
RQQ = FLOAT(BIG)/FLOAT(SMALL)
SNR = 0.0
IF (RQQ.GT.1.0) SNR = 10.0*ALOG10((RQQ-1.0))
WRITE (SIZEMS(1),'(A,I5,A,I5,A,G13.6,A,G11.4,A)',ERR=9191)
&
'LEAST: ',SMALL,' BIGGEST: ',BIG,' Ratio: ',RQQ,' S/N: ',SNR,' dB'
9191
WRITE (SIZEMS(2),'(A,I5,A,I6,A,I3,A,I3)',ERR=9192) ' MODE = ',
&
I16384,' with ',MODE,' counts. Data buffer has ',IXLEN,' x ',IYLEN
9192
IF (GRPHPG.EQ.0) THEN
CALL SAYAT(11,0,0,SIZEMS(1))
CALL SAYAT(11,1,0,SIZEMS(2))
ELSE
CALL SAYAT(13,26,0,SIZEMS(1))
CALL SAYAT(13,27,0,SIZEMS(2))
ENDIF
ENDIF
9998 CONTINUE
RETURN
*---------ENTRY PLOTHP
DOIT = .TRUE.
GOTO 1
END
*---------------------------------------------------------------------SUBROUTINE CONV12(IARR1,IARR2,IX,IY)
*
INTEGER*4 IX,IY,MASK,IAND
INTEGER*4 IX,IY
INTEGER*2 IARR2(IX,IY),K
INTEGER*1 IARR1(IX,IY)
*
LOGICAL NOT14,KILLIT
*
COMMON /PARB14/NOT14,KILLIT
*
MASK = $7FFF
*
IF (KILLIT.OR.(.NOT.NOT14)) MASK = $3FFF
DO 1 I = 1,IY
DO 2 J = 1,IX
K = IARR1(J,I)
IF (K.LT.0) K = K + 256
IARR2(J,I) = K
2
CONTINUE
1 CONTINUE
RETURN
END
*---------------------------------------------------------------------SUBROUTINE CONV42(IARR4,IARR2,IX,IY)
INTEGER*4 IX,IY,IAND,IARR4(IX,IY),MASK
INTEGER*2 IARR2(IX,IY)
LOGICAL NOT14,KILLIT
COMMON /PARB14/NOT14,KILLIT
MASK = $7FFF
IF (KILLIT.OR.(.NOT.NOT14)) MASK = $3FFF
L = MASK

DO 1 I = 1,IY
DO 2 J = 1,IX
K = IARR4(J,I)
KL = IAND(K,L)
IARR2(J,I) = KL
2
CONTINUE
1 CONTINUE
RETURN
END
**---------------------------------------------------------------------*
SUBROUTINE CONVR2(ARR4,IARR2,IX,IY)
*
REAL*4 ARR4(IX,IY),BIG,SMALL,RANGE
*
INTEGER*4 IX,IY,IAND,L
*
INTEGER*2 IARR2(IX,IY)
*
COMMON /PARNMR/BIG,SMALL,RANGE
*
BIG = 3.3E38
*
SMALL = -3.3E38
*
DO 1 I = 1,IY
*
DO 2 J = 1,IX
*
IF (ARR4(I,J).GT.BIG) BIG = ARR4
*
IF (ARR4(I,J).LT.SMALL) SMALL = ARR4
*
2
CONTINUE
*
1 CONTINUE
*
RANGE = BIG - SMALL
* 9999 CONTINUE
*
L = $03FFF
*
FACTOR = L / RANGE
*
DO 3 I = 1,IY
*
DO 4 J = 1,IX
*
IARR2(I,J) = (ARR4(I,J)-SMALL)*FACTOR
*
4
CONTINUE
*
3 CONTINUE
*
RETURN
**---------*
ENTRY CNVR2(ARR4,IARR2,IX,IY)
*
GOTO 9999
*
END
**---------------------------------------------------------------------*
INTEGER*4 FUNCTION BLKDSR(ARRAY,IX,IY)
*
INTEGER*4 IX,IY,KADDR,FCALL3,ALLOCS,IWHERE,IWHERR,BLKRDS,BKRDS,BKDSR
*
INTEGER*1 ARRAY(IX,IY)
*
LOGICAL WHICH,NORML
*
COMMON /CONVQ2/IWHERE,IWHERR
*
EXTERNAL CONVR2,KADDR,CALL4,CALL3,BLKDSP,BLKDS,CNVR2,FCALL3,ALLOCS,RLSES
*
WHICH =.FALSE.
*
NORML = .TRUE.
*
GOTO 9999
**---------*
ENTRY BLKRDS(ARRAY,IX,IY)
*
WHICH = .TRUE.
*
NORML = .TRUE.
*
GOTO 9999
**---------*
ENTRY BKRDS(ARRAY,IX,IY)
*
WHICH = .TRUE.
*
NORML = .FALSE.
*
GOTO 9999
**---------*
ENTRY BKDSR(ARRAY,IX,IY)
*
WHICH = .FALSE.

*
NORML = .FALSE.
* 9999 CONTINUE
*
ISIZE = IX*IY*2
*
IPOINT = ALLOCS(ISIZE)
*
IF (IPOINT.LE.0) THEN
*
III = 0
*
GOTO 9909
*
ENDIF
*
IWHERE = IPOINT
*
IARR = KADDR(ARRAY)
*
IIX = KADDR(IX)
*
IIY = KADDR(IY)
*
IF (NORML) THEN
*
CALL CALL4(CONVR2,IARR,IPOINT,IIX,IIY)
*
ELSE
*
CALL CALL4(CNVR2,IARR,IPOINT,IIX,IIY)
*
ENDIF
*
IF (WHICH) THEN
*
III = FCALL3(BLKDS,IPOINT,IIX,IIY)
*
ELSE
*
III = FCALL3(BLKDSP,IPOINT,IIX,IIY)
*
ENDIF
*
CALL RLSES
* 9909 CONTINUE
*
IF (NORML.AND.WHICH) THEN
*
BLKRDS = III
*
ELSEIF (WHICH.AND..NOT.NORML) THEN
*
BKRDS = III
*
ELSEIF (NORML) THEN
*
BLKDSR= III
*
ELSE
*
BKDSR = III
*
ENDIF
*
RETURN
*
END
*---------------------------------------------------------------------INTEGER*4 FUNCTION BLKDS1(ARRAY,IX,IY)
INTEGER*4 IX,IY,KADDR,IWHERE,IWHERR,BLK1DS,FCALL3,ALLOCS
INTEGER*1 ARRAY(IX,IY)
LOGICAL WHICH
COMMON /CONVQ2/IWHERE,IWHERR
EXTERNAL CONV12,KADDR,CALL4,CALL3,BLKDSP,BLKDS,FCALL3,ALLOCS,RLSES
WHICH =.FALSE.
GOTO 9999
*---------ENTRY BLK1DS(ARRAY,IX,IY)
WHICH = .TRUE.
GOTO 9999
9999 CONTINUE
ISIZE = IX*IY*2
IPOINT = ALLOCS(ISIZE)
IF (IPOINT.LE.0) THEN
III = 0
GOTO 9909
ENDIF
IWHERE = IPOINT
IARR = KADDR(ARRAY)
IIX = KADDR(IX)
IIY = KADDR(IY)
CALL CALL4(CONV12,IARR,IPOINT,IIX,IIY)

IF (WHICH) THEN
III = FCALL3(BLKDS,IPOINT,IIX,IIY)
ELSE
III = FCALL3(BLKDSP,IPOINT,IIX,IIY)
ENDIF
CALL RLSES
9909 CONTINUE
IF (WHICH) THEN
BLK1DS = III
ELSE
BLKDS1 = III
ENDIF
RETURN
END
*---------------------------------------------------------------------INTEGER*4 FUNCTION BLKDS4(ARRAY,IX,IY)
INTEGER*4 IX,IY,KADDR,IWHERE,IWHERR,FCALL3,BLK4DS,ALLOCS
INTEGER*4 ARRAY(IX,IY)
LOGICAL WHICH
COMMON /CONVQ2/IWHERE,IWHERR
EXTERNAL CONV42,KADDR,CALL4,CALL3,BLKDSP,BLKDS,FCALL3,ALLOCS,RLSES
WHICH =.FALSE.
GOTO 9999
*---------ENTRY BLK4DS(ARRAY,IX,IY)
WHICH = .TRUE.
GOTO 9999
9999 CONTINUE
ISIZE = IX*IY*2
IPOINT = ALLOCS(ISIZE)
IF (IPOINT.LE.0) THEN
III = 0
GOTO 9909
ENDIF
IWHERE = IPOINT
IARR = KADDR(ARRAY)
IIX = KADDR(IX)
IIY = KADDR(IY)
CALL CALL4(CONV42,IARR,IPOINT,IIX,IIY)
IF (WHICH) THEN
III = FCALL3(BLKDS,IPOINT,IIX,IIY)
ELSE
III = FCALL3(BLKDSP,IPOINT,IIX,IIY)
ENDIF
CALL RLSES
9909 CONTINUE
IF (WHICH) THEN
BLK4DS = III
ELSE
BLKDS4 = III
ENDIF
RETURN
END
*---------------------------------------------------------------------SUBROUTINE PARPL4(ARRAY,IX,IY)
INTEGER*4 IX,IY,KADDR,ALLOCS,IWHERE,IWHERR
INTEGER*4 ARRAY(IX,IY)
COMMON /CONVQ2/IWHERE,IWHERR
EXTERNAL CONV42,KADDR,CALL4,CALL3,PARPLT,RLSE,ALLOCS,RLSES
ISIZE = IX*IY*2

IPOINT = ALLOCS(ISIZE)
IF (IPOINT.EQ.0) RETURN
IWHERE = IPOINT
IARR = KADDR(ARRAY)
IIX = KADDR(IX)
IIY = KADDR(IY)
CALL CALL4(CONV42,IARR,IPOINT,IIX,IIY)
CALL CALL3(PARPLT,IPOINT,IIX,IIY)
CALL RLSES
RETURN
END
**---------------------------------------------------------------------*
SUBROUTINE PARPL1(ARRAY,IX,IY)
*
INTEGER*4 IX,IY,KADDR,ALLOCS,IWHERE,IWHERR
*
INTEGER*1 ARRAY(IX,IY)
*
COMMON /CONVQ2/IWHERE,IWHERR
*
EXTERNAL CONV12,KADDR,CALL4,CALL3,PARPLT,RLSE,ALLOCS,RLSES
*
ISIZE = IX*IY*2
*
IPOINT = ALLOCS(ISIZE)
*
IF (IPOINT.EQ.0) RETURN
*
IWHERE = IPOINT
*
IARR = KADDR(ARRAY)
*
IIX = KADDR(IX)
*
IIY = KADDR(IY)
*
CALL CALL4(CONV12,IARR,IPOINT,IIX,IIY)
*
CALL CALL3(PARPLT,IPOINT,IIX,IIY)
*
CALL RLSES
*
RETURN
*
END
*---------------------------------------------------------------------INTEGER*4 FUNCTION BSERCH(CUMUL,VALUE)
INTEGER*4 CUMUL(0:16383),VALUE
INTEGER*4 LOW,HIGH,TEST,LOWV,HIGHV,TESTV,BLSRCH,BHSRCH
LOGICAL*1 NORM,QHIGH,QLOW
NORM = .TRUE.
QHIGH = .FALSE.
QLOW = .FALSE.
GOTO 9999
*---------ENTRY BHSRCH(CUMUL,VALUE)
NORM = .FALSE.
QHIGH = .TRUE.
QLOW = .FALSE.
GOTO 9999
*---------ENTRY BLSRCH(CUMUL,VALUE)
NORM = .FALSE.
QHIGH = .FALSE.
QLOW = .TRUE.
GOTO 9999
9999 CONTINUE
LOW = 0
HIGH = 16383
LOWV = CUMUL(LOW)
HIGHV = CUMUL(HIGH)
1 CONTINUE
TEST = (LOW+HIGH)/2
TESTV = CUMUL(TEST)
IF (LOW.EQ.HIGH.OR.(LOW+1).EQ.HIGH) THEN
GOTO 9000

ELSEIF (TESTV.EQ.VALUE) THEN


IF (NORM) GOTO 9000
IF (QHIGH) THEN
HIGH = TEST
HIGHV = TESTV
ELSEIF (QLOW) THEN
LOW = TEST
LOWV = TESTV
ELSE
GOTO 9000
ENDIF
GOTO 1
ELSEIF (TESTV.LT.VALUE) THEN
LOW = TEST
LOWV = TESTV
ELSEIF (TESTV.GT.VALUE) THEN
HIGH = TEST
HIGHV = TESTV
ENDIF
GOTO 1
9000 CONTINUE
IF (NORM) BSERCH = TEST
IF (QHIGH) BHSRCH = TEST
IF (QLOW) BLSRCH = TEST
RETURN
END
*-----------------------------------------------------------------------INTEGER*4 FUNCTION IWHBUF(BUFFER)
CHARACTER*8 HAPS(32)
INTEGER*4 IAPS(32),LENS(32),BUFFER,KADDR,K,I,L,J
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
COMMON /OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
SAVE /OMACNT/,/OMATYP/
SAVE
I = KADDR(BUFFER)
DO 2397 K = 1,31
J = I - IAPS(K)
IF (J.EQ.0) THEN
L = K
GOTO 2398
ENDIF
2397 CONTINUE
IWHBUF = -1
PRINT *,'CAN''T DETERMINE BUFFER NUMBER FROM ADDRESS'
RETURN
2398 CONTINUE
IWHBUF = L
RETURN
END
*-----------------------------------------------------------------------SUBROUTINE SUPRES(ARRAY,X,Y,X1,X2,Y1,Y2,FILL)
INTEGER*4 X,Y,X1,X2,Y1,Y2,FILL,I,J,I1,I2,J1,J2
INTEGER*2 ARRAY(X,Y)
SAVE
IF (X1.GT.X2) THEN
I1 = X2
I2 = X1
ELSE
I1 = X1
I2 = X2

ENDIF
IF (Y1.GT.Y2) THEN
J1 = Y2
J2 = Y1
ELSE
J1 = Y1
J2 = Y2
ENDIF
IF (I1.LT.1) I1 = 1
IF (I1.GT.X) I1 = X
IF (I2.LT.1) I2 = 1
IF (I2.GT.X) I2 = X
IF (J1.LT.1) J1 = 1
IF (J1.GT.X) J1 = Y
IF (J2.LT.1) J2 = 1
IF (J2.GT.Y) J2 = Y
DO 1 J = J1,J2
DO 2 I = I1,I2
ARRAY(I,J) = FILL
2
CONTINUE
1 CONTINUE
RETURN
END

Anda mungkin juga menyukai