Вы находитесь на странице: 1из 44

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

* 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 (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,FNRNSN
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/,/OMABFL/
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')) THEN
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)) THEN
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)) THEN
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
1289 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))
1286 CONTINUE
1288 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))
1285 CONTINUE
1287 CONTINUE
ENDIF
WHERTG(I) = YLOC
NPNTAG(I) = LLX
TYPTAG(I) = TYPS(DEFBUF)
FRAMTG(I) = FNRNSN(DEFBUF)
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 2999
2997 CONTINUE
2999 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 PRINT *,'STORE displayed frame as (0, 1-999; xxxyyy)? [INVALID TO ABORT]'
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 ABORT]'
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()
7706 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
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 1999
1997 CONTINUE
1998 FORMAT('I: ',I5,'-> ',I5,' 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()
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)) THEN
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), Diag(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)
IF (K.EQ.1) THEN
FLAG = .TRUE.
9980 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.
9981 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.
9982 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
9781 PRINT *,' ABSOLUTE FLOOR VALUE IS ',SMALL2,' ABSOLUTE CEILING IS ',BIG2
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.CNVDBG)) 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)
IF (K.EQ.1) THEN
BIGSML = .TRUE.
FLAG = .TRUE.
BIGSAV = BIG
9782 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,FNRNSN
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/,/OMABFL/
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
*
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,HCNTRL))
1239 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,J))
1238 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/,/SCALEM/,/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/,/SCALEM/,/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(DEFBUF).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(DEFBUF).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(DEFBUF).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,FOOB
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-) display'
PRINT *,' it in a variety of forms. A SUMMARY of commonly used commands'
PRINT *,' is displayed on the next screen. When operations are in '
PRINT *,' progress the LEDS on the keypad will cycle, ALL LEDS go on '
PRINT *,' when the operation is complete. '
PRINT *,' '
PRINT *,' When the system generates plots, listings, profiles &c the'
PRINT *,' summary help screen is overwritten. To redisplay summary help'
PRINT *,' type ? . There are a few additional, rarely used commands'
PRINT *,' which are not listed in the summary help screen, please refer'
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

Вам также может понравиться