You are on page 1of 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 DATAACQ.LIB library, other components are in files:*
* INITOMA.FOR, GLABEL.FOR, STAMP.FOR, TSTSUB.FOR, ETSTSUB.FOR, XTSTSUB.FOR, *
* KTSTSUB.FOR, CTSTSUB.FOR, MTSTSUB.FOR, LABELS.FOR, AFROP.ASM, I2EPREP.FOR, *
* MORFROP.ASM and I2E.FOR.
*
* These routines build upon the routines in SCOPEBUS.LIB, which
*
* contains the low level interfacing to the IEEE-488 bus, the SENSOR I/O board*
* and the PAR/OMA. This library should always be linked prior to SCOPEBUS, *
* GRAPHICS, UTILS and ASMUTILS. The routines in DATAACQ.LIB are high level *
* interface routines, frame operations & frame i/o, PAR programming and
*
* command & operator interface routines.
*
*-----------------------------------------------------------------------------*
$SEGMENT FRAMOPS_
*compiler is directed to place object code in segment FRAMOPS_
*
*-----------------------------------------------------------------------------*
$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 MENUFM()
*
*
ENTRY MENUFR(LENBUF)
*
*
ENTRY MNFMST(LENWWW)
*
*---------------------------------------------------------------------*
*
SUBROUTINE CNDHIT
*
*
ENTRY CNDZAP
*
*
ENTRY CND81T(ICHIN)
*
*
ENTRY CNDH1T(ICHIN,ICOND,ICOMP,IIHIT)
*
*
ENTRY CNDZBP(ICHIN,ICOND,ICOMP)
*
*---------------------------------------------------------------------*
*
SUBROUTINE C2DHIT
*
*
ENTRY C2DZAP
*
*
ENTRY C2D81T(ICHIN)
*
*
ENTRY C2DH1T(ICHIN,ICOND,ICOMP,ICOMP2,IIHIT)
*
*
ENTRY C2DZBP(ICHIN,ICOND,ICOMP,ICOMP2)
*
*---------------------------------------------------------------------*
*
SUBROUTINE REDISP
*
*
ENTRY RED1SP(ICHIN)
*
*---------------------------------------------------------------------*
*
SUBROUTINE BUFSTA
*
*---------------------------------------------------------------------*
*
SUBROUTINE FASTOR
*
*
ENTRY FAST0R(ICHIN)
*
*
ENTRY FBST0R(ICHIN,INN,IIDR)
*
*---------------------------------------------------------------------*
*
SUBROUTINE FASGET
*
*
ENTRY FASG3T(ICHIN)
*
*
ENTRY FBSG3T(ICHIN,INN,IIDR)
*
*---------------------------------------------------------------------*
*
SUBROUTINE CROP2(ARRAY,LX,LY,XS,XE,YS,YE)
*
*
ENTRY ICROP2(JDST,LX,LY,XS,XE,YS,YE) same as ICRP2
*
*
ENTRY ICRP2(JDST,LX,LY,XS,XE,YS,YE) same as ICROP2
*
*---------------------------------------------------------------------*
*
SUBROUTINE CROP2Y(ARRAY,LX,LY,YS,YE)
*

*
ENTRY ICRP2Y(JDST,LX,LY,YS,YE)
*
*---------------------------------------------------------------------*
*
SUBROUTINE CROP2X(ARRAY,LX,LY,XS,XE)
*
*
ENTRY ICRP2X(JDST,LX,LY,XS,XE)
*
*---------------------------------------------------------------------*
*
SUBROUTINE ROTBUF(BUFFER,IROT,X,Y)
*
*
ENTRY IRTBUF(IIBUF,IROT,X,Y)
*
*---------------------------------------------------------------------*
*
SUBROUTINE FLIP(ICH)
*
*---------------------------------------------------------------------*
*
SUBROUTINE IFLPUD(IIT,X,Y)
*
*---------*
*
ENTRY IFLPLR(IIT,X,Y)
*
*---------*
*
ENTRY IFLPDI(IIT,X,Y)
*
*---------------------------------------------------------------------*
*
SUBROUTINE FLIPUD(IT,X,Y)
*
*---------*
*
ENTRY FLIPLR(IT,X,Y)
*
*---------*
*
ENTRY FLIPDI(IT,X,Y)
*
*---------------------------------------------------------------------*
*
SUBROUTINE INRMTO(IIT,X,Y,NRMVAL,OFFSET)
*
*
ENTRY NRMSLF(IIT,X,Y,NRMVAL,OFFSET)
*
*---------------------------------------------------------------------*
*
SUBROUTINE NRMTO(IT,X,Y,NRMVAL,OFFSET)
*
*
ENTRY SLFNRM(IT,X,Y,NRMVAL,OFFSET)
*
*---------------------------------------------------------------------*
*
SUBROUTINE INRMT0(IIT,X,Y,NRMVAL,OFFSET)
*
*---------------------------------------------------------------------*
*
SUBROUTINE NRMT0(IT,X,Y,NRMVAL,OFFSET)
*
*=============================================================================*
*SEGMENT FRAMDISP
*
*
SUBROUTINE XPL0DE(SOURCE,TARGET,LX,LY,YSI,YEI,YMULTI,PL0TYP)
*
*
ENTRY XPLOD3(SOURCE,TARGET,LX,LY,PL0TYP)
*
*
ENTRY XPLODE(SOURCE,TARGET,LX,LY)
*
*=============================================================================*
*SEGMENT SLICE_OP
*
*
SUBROUTINE PLTSLS(LIST,NUMBER)
*
*
ENTRY XTRACT(BUFNO,FROM,TO)
*
*
ENTRY XTRAMN(BUFNO,FROM,FROM2,TO)
*
*
ENTRY XTRAMD(BUFNO,FROM,FROM2,TO)
*
*
ENTRY XTRMD3(BUFNO,FROM,TO)
*
*
ENTRY XTRMD5(BUFNO,FROM,TO)
*
*
ENTRY YTRACT(BUFNO,FROM,TO)
*
*
ENTRY CPYSLC(FROM,TO)
*
*
ENTRY SUBSLC(FROM,FROM2,TO)
*
*
ENTRY SZBSLC(FROM,FROM2,TO)
*
*
ENTRY CPYSLS(FROM,TO,FROM2)
*
*
ENTRY ERASLS(FROM,TO)
*
*
ENTRY SPLSLC
*
*
ENTRY RPLTYP(IRETPL)
*
*
ENTRY PLTSLC(FROM)
*
*
ENTRY LSTSLC(LIST,NUMBER) same as LSTSLS
*
*
ENTRY LSTSLS(LIST,NUMBER) same as LSTSLC
*
*---------------------------------------------------------------------*
*
SUBROUTINE XTR4CT(IT,LLX,LLY,FROM,TO)
*
*
ENTRY YTR4CT(IT,LLX,LLY,FROM,TO)
*
*
ENTRY XTR4MN(IT,LLX,LLY,FROM,FROM2,TO)
*
*
ENTRY XTR3MD(IT,LLX,LLY,FROM,TO)
*

*
ENTRY XTR5MD(IT,LLX,LLY,FROM,TO)
*
*
ENTRY XTRNMD(IT,LLX,LLY,FROM,FROM2,TO)
*
**============================================================================*
* These routines are FORTRAN implementations of the assembly routine actually *
* used. The assembly counterparts are IIASIN and IIACOS, and are to be found *
* in AFROP.ASM.
*
*$SEGMENT DATA_RED
*
*
SUBROUTINE IIFSIN(DSTREF,SRC,LEN)
*
*
ENTRY DDFCOS(DSTREF,SRC,LEN)
*
**---------------------------------------------------------------------*
*
SUBROUTINE DDFS1N(DSTREF,SRC,LEN,ASNTBL,SQRTBL)
*
**---------------------------------------------------------------------*
*
SUBROUTINE DDFC0S(DSTREF,SRC,LEN,ASNTBL,SQRTBL)
*
*******************************************************************************
*---------------------------------------------------------------------INTEGER*4 FUNCTION MENUFM()
CHARACTER*8 HEXOF,RESULT,INPUT,HEXARR(10),HAPS(32)
CHARACTER PADS*3,NCRUDQ*1,FILNAM*24,FRMTYP(-2:20)*22
CHARACTER TC*1,TCALGN(2)*1,OPMESS
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,TYPFRM,NFRAME,NDRIVE
INTEGER*4 APS(0:7),LNS(0:7),IAPS(32),LENS(32),LENFR,LENTR,NTR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,INTOF,KADDR,SAVLEN
INTEGER*4 KTEST,KTEST2,KTEST3
INTEGER*2 TYP(3),ICHS(3),ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32)
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,I2,LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*2 DUMPIT,PAUSES,CONFRM,INYET,FOOB,QWERTY*4
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),INITYT,DOIT
EQUIVALENCE (IA,IAPS(1)),(IA2,IAPS(2)),(IA4,IAPS(3)),(IZ,IZR,IAPS(4))
EQUIVALENCE (IMX,IAPS(5)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
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)
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/FRAMNG/LENFR,LENTR,NTR
COMMON /NTRVN/ABORT,ESCAPE,INTRPT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR
NSN
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMADSK/NDRIVE,NFRAME
COMMON /XFRAME/TYPFRM,FRMTYP,/OMABFL/BUFGUD,BUFUSE
COMMON /DUMP/DUMPIT,/PAWS/PAUSES,/CNFRM/CONFRM,/YUIOP/QWERTY
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPR2/,/FRAMNG/,/OMATYP/,/OMABFL/
SAVE /ZEROS/,/AMPLS/,/XFRAME/,/OMABFR/,/OMADSK/,/OMACNT/
SAVE /DUMP/,/PAWS/,/CNFRM/,/YUIOP/
EXTERNAL ISTACK,HEXOF,I2AND2,KADDR,REDOBF,KTEST,KTEST2,KMENU,KTEST3
SAVE INITYT,SAVLEN,MXV
DATA SAVLEN/0/,INITYT/.FALSE./
IF (LENFR.GT.131072) LENFR = 131072
IF (LENFR.LE.0) LENFR = 512
LEN = LENFR*2
INITYT = LEN.EQ.SAVLEN .AND. INITYT

IF (.NOT.INITYT) CALL REDOBF


GOTO 9090
*---------ENTRY MENUFR(LENBUF)
INITYT = LENBUF.EQ.SAVLEN .AND. INITYT
LEN = LENBUF*2
CALL BFREDO(LEN/2)
9090 CONTINUE
IF (.NOT.INITYT) THEN
MXV = 32
DO 1 I = 1,32
IF (BUFUSE(I)) MXV = I
1
CONTINUE
ENDIF
SAVLEN = LEN
INITYT = .TRUE.
9998 CONTINUE
DUMPIT = .FALSE.
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
*
IF (DOIT) THEN
*
IF (.NOT.BUFGUD(5)) THEN
*
PRINT *,'THERE IS NO MAX. FRAME BUFFER, INSUFFICIENT RAM'
*
ELSEIF (AVALID.AND.(TYPS(5).EQ.5.OR.TYPS(5).EQ.7)) THEN
*
PRINT *,'MAX. frame buffer contains VALID data '
*
ELSEIF (TYPS(5).EQ.-2) THEN
*
PRINT *,'MAX. frame buffer DOES NOT contain valid data '
*
ELSE
*
PRINT *,'MAX. frame buffer MAY NOT contain valid data '
*
ENDIF
*
ICH = KTEST3(-1,0,31)
*
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
*
IF (ICH.GT.0) GOTO 3780
*
IF (.NOT.BUFGUD(4)) THEN
*
PRINT *,'
THERE IS NO ZERO FRAME BUFFER, INSUFFICIENT RAM'
*
ELSEIF (ZVALID.AND.TYPS(4).EQ.-1) THEN
*
PRINT *,'
Zero frame buffer contains VALID data '
*
ELSEIF (TYPS(4).EQ.-2) THEN
*
PRINT *,'
Zero frame buffer DOES NOT contain valid data '
*
ELSE
*
PRINT *,'
Zero frame buffer MAY NOT contain valid data '
*
ENDIF
*
ICH = KTEST3(-1,0,31)
*
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
*
IF (ICH.GT.0) GOTO 3780
*
IF (.NOT.BUFUSE(3)) THEN
*
PRINT *,'AUXILLIARY frame buffer 3 UNUSABLE '
*
ELSEIF (TYPS(3).EQ.0) THEN
*
PRINT *,'AUXILLIARY frame buffer 3 has VALID UNCORRECTED data '
*
ELSEIF (TYPS(3).EQ.-2) THEN
*
PRINT *,'AUXILLIARY frame buffer 3 DOES NOT contain valid data '
*
ELSE
*
PRINT *,'AUXILLIARY frame buffer 3 is ',FRMTYP(TYPS(3))
*
ENDIF
*
IF (.NOT.BUFUSE(2)) THEN
*
PRINT *,'
AUXILLIARY frame buffer 2 UNUSABLE '
*
ELSEIF (TYPS(2).EQ.0) THEN
*
PRINT *,'
AUXILLIARY frame buffer 2 has VALID UNCORRECTED data
'

*
*
a '
*
*
*
*
*

ELSEIF (TYPS(2).EQ.-2) THEN


PRINT *,'
AUXILLIARY frame buffer 2 DOES NOT contain valid dat
ELSE

PRINT *,'
AUXILLIARY frame buffer 2 is ',FRMTYP(TYPS(2))
ENDIF
PRINT *,' '
ENDIF
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
PRINT 8001,'WHICH? 1) MAIN BUFFER ',HAPS(1)
& ,FRMTYP(TYPS(1)),LENXS(1),LENYS(1),FNRNSN(1)
PRINT 8001,'
2) auxilliary 2 ',HAPS(2)
& ,FRMTYP(TYPS(2)),LENXS(2),LENYS(2),FNRNSN(2)
PRINT 8001,'
3) auxilliary 3 ',HAPS(3)
& ,FRMTYP(TYPS(3)),LENXS(3),LENYS(3),FNRNSN(3)
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
IF (BUFUSE(4)) PRINT 8001,'
4) zero frame ',HAPS(4)
& ,FRMTYP(TYPS(4)),LENXS(4),LENYS(4),FNRNSN(4)
IF (BUFUSE(5)) PRINT 8001,'
5) MAX. frame ',HAPS(5)
& ,FRMTYP(TYPS(5)),LENXS(5),LENYS(5),FNRNSN(5)
PRINT *,' 6) EXIT TO PRIOR LEVEL'
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
IF (BUFUSE(7)) PRINT 8001,'
7) prior main ',HAPS(7)
& ,FRMTYP(TYPS(7)),LENXS(7),LENYS(7),FNRNSN(7)
IF (BUFUSE(8)) PRINT 8001,'
8) prior aux. 2 ',HAPS(8)
& ,FRMTYP(TYPS(8)),LENXS(8),LENYS(8),FNRNSN(8)
IF (BUFUSE(9)) PRINT 8001,'
9) prior aux. 3 ',HAPS(9)
& ,FRMTYP(TYPS(9)),LENXS(9),LENYS(9),FNRNSN(9)
IF (BUFUSE(10)) THEN
PRINT 8001,'
10) Scratchpad 1 ',HAPS(10)
&
,FRMTYP(TYPS(10)),LENXS(10),LENYS(10),FNRNSN(10)
IF (BUFUSE(11)) PRINT 8001,'
11) Scratchpad 2 ',HAPS(11)
&
,FRMTYP(TYPS(11)),LENXS(11),LENYS(11),FNRNSN(11)
IF (BUFUSE(12)) PRINT 8001,'
12) Scratchpad 3 ',HAPS(12)
&
,FRMTYP(TYPS(12)),LENXS(12),LENYS(12),FNRNSN(12)
ENDIF
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
IF (MXV.GE.13) PRINT 8002,'Other choices are:'
DO 3300 I = 13,MXV
IF (BUFGUD(I)) PRINT 8003,I
3300 CONTINUE
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 3791
IF (ICH.GT.0) GOTO 3780
CONFRM = .TRUE.
ICH = KMENU(1,0,31)
3780 CONTINUE
IF (ICH.EQ.6) GOTO 3790
IF (.NOT.BUFGUD(ICH)) THEN
IF (NUML) THEN
WRITE (11,*) ' BUFFER',ICH,' IS UNALLOCATED! Proceed? (y/N)'
I = LMENU(0,0,1)

ELSE
WRITE (11,*) ' BUFFER',ICH,' IS UNALLOCATED AND DISALLOWED - CHOO
SE ANOTHER'
I = 0
ENDIF
IF (I.EQ.0) GOTO 9998
ELSEIF (.NOT.BUFUSE(ICH)) THEN
WRITE (11,*) 'Buffer #',ICH,' may be TOO SHORT, are you sure? (y/N)'
I = LMENU(0,0,1)
IF (I.EQ.0) GOTO 9998
ENDIF
3790 CONTINUE
MENUFM = ICH
ERR = -1
RETURN
3791 ICH = 6
ERR = -1
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
GOTO 3790
8001 FORMAT (A,'@ $',A8,', ',A22,1X,I3,'x',I3,' ',I7)
8002 FORMAT (\A\)
8003 FORMAT (\1X,I2\)
*---------ENTRY MNFMST(LENWWW)
SAVLEN = LENWWW*2
INITYT = .TRUE.
RETURN
END
*---------------------------------------------------------------------SUBROUTINE CNDHIT
CHARACTER*8 HEXOF,HAPS(32),FRMTYP(-2:20)*22,TC*1,TCALGN(2)*1
CHARACTER*20 FRAME,GDUNGE
INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS,ICHIN,IT
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32)
INTEGER*4 TYPFRM,LENS(32),APS(0:7),LNS(0:7),MENUFM
INTEGER*4 LENFR,LENTR,NTR
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,ASC,SCAN,KBF1,KBF2,ERR,OPNUM
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,CONFRM
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,ZAP,INYET
,FOOB
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN

COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/ APS,LNS,/OMACNT/IAPS,HAPS,LENS,/CNFRM/CONFRM
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FRAMLN/,/OMABFL/,/OMATYP/,/OMAPAR/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/CNFRM/
EXTERNAL MENUFM,INTOF,IAND,ISLSH2,ISHIH2,ISLEH2,ISLTH2,ISGTH2
EXTERNAL ISGEH2,ISPLH2,ISMIH2,ISVCH2,ISVSH2,ISCCH2,ISCSH2
SAVE
ZAP = .FALSE.
GOTO 3772
*---------ENTRY CNDZAP
ZAP = .TRUE.
3772 CONTINUE
IA256 = APS(0)
IA = IA256
IF (DATACQ) IA = IA + 1024
IT = IA256
HAPS(1) = HEXOF(IAPS(1))
3780 CONTINUE
IF (ERR.NE.0) CALL GCRCLS
EXIT = .FALSE.
ICH = MENUFM()
3781 CONTINUE
IF (ICH.EQ.6.OR.ABORT.OR.ESCAPE.OR.INTRPT) THEN
GOTO 2
ENDIF
3782 CONTINUE
CALL CRCLS
PRINT *,' WHICH CONDITIONAL? (CompVal COND TstVal => Replace)'
PRINT *,' 1) *nop* '
PRINT *,' 2) HI
'
PRINT *,' 3) LS
'
PRINT *,' 4) CC [HS]'
PRINT *,' 5) CS [LO]'
PRINT *,' 6) NE
'
PRINT *,' 7) EQ
'
PRINT *,' 8) VC
'
PRINT *,' 9) VS
'
PRINT *,' 10) PL <== '
PRINT *,' 11) MI
'
PRINT *,' 12) GE
'
PRINT *,' 13) LT
'
PRINT *,' 14) GT
'
PRINT *,' 15) LE
'
CONFRM = .TRUE.
ICND = MENU(10,0,15)
3783 CONTINUE
PRINT *,' Comparison value? (0 .. 65535; range MASKED)'
READ (*,'(A)',ERR=3783) GDUNGE
ICMP = INTOF(GDUNGE)
ICMP = IAND(ICMP,$0FFFF)
3784 CONTINUE
IF (ZAP) THEN
IHIT = 0
ELSE
PRINT *,' Replacement value? (0 .. 16383; range MASKED)'
READ (*,'(A)',ERR=3783) GDUNGE

IHIT = INTOF(GDUNGE)
IHIT = IAND(IHIT,$03FFF)
ENDIF
3789 CONTINUE
IT = IAPS(ICH)
*
TYPS(ICH) = TYPFRM
IXL = LENXS(ICH)
IYL = LENYS(ICH)
LLL = IXL*IYL
IF (LLL.LE.0.AND.ICH.GE.1.AND.ICH.LE.12) LLL = LENFR
IF (ICND.EQ.2) THEN
CALL ISHIH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.3) THEN
CALL ISLSH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.4) THEN
CALL ISCCH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.5) THEN
CALL ISCSH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.6) THEN
CALL ISNEH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.7) THEN
CALL ISEQH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.8) THEN
CALL ISVCH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.9) THEN
CALL ISVSH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.10) THEN
CALL ISPLH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.11) THEN
CALL ISMIH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.12) THEN
CALL ISGEH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.13) THEN
CALL ISLTH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.14) THEN
CALL ISGTH2(IT,LLL,ICMP,IHIT)
ELSEIF (ICND.EQ.15) THEN
CALL ISLEH2(IT,LLL,ICMP,IHIT)
ENDIF
IF (EXIT) GOTO 2
GOTO 3772
2 CONTINUE
1000 CONTINUE
RETURN
*---------ENTRY CND81T(ICHIN)
ICH = ICHIN
ZAP = .FALSE.
EXIT = .TRUE.
GOTO 3781
*---------ENTRY CNDH1T(ICHIN,ICOND,ICOMP,IIHIT)
ICH = ICHIN
ICND = ICOND
ICMP = ICOMP
IHIT = IIHIT
EXIT = .TRUE.
ZAP = .FALSE.
GOTO 3789
*----------

ENTRY CNDZBP(ICHIN,ICOND,ICOMP)
ICH = ICHIN
ICND = ICOND
ICMP = ICOMP
IHIT = 0
EXIT = .TRUE.
ZAP = .TRUE.
GOTO 3789
END
*---------------------------------------------------------------------SUBROUTINE C2DHIT
CHARACTER*8 HEXOF,HAPS(32),FRMTYP(-2:20)*22,TC*1,TCALGN(2)*1
CHARACTER*20 FRAME,GDUNGE
INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS,ICHIN,IT
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32)
INTEGER*4 TYPFRM,LENS(32),APS(0:7),LNS(0:7),MENUFM
INTEGER*4 LENFR,LENTR,NTR
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,ASC,SCAN,KBF1,KBF2,ERR,OPNUM
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,CONFRM
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,ZAP,INYET
,FOOB
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/ APS,LNS,/OMACNT/IAPS,HAPS,LENS,/CNFRM/CONFRM
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FRAMLN/,/OMABFL/,/OMATYP/,/OMAPAR/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/CNFRM/
EXTERNAL MENUFM,INTOF,IAND,I2LSH2,I2HIH2,I2LEH2,I2LTH2,I2GTH2
EXTERNAL I2GEH2,I2PLH2,I2MIH2,I2VCH2,I2VSH2,I2CCH2,I2CSH2
SAVE
ZAP = .FALSE.
GOTO 3772
*---------ENTRY C2DZAP
ZAP = .TRUE.
3772 CONTINUE
IA256 = APS(0)
IA = IA256
IF (DATACQ) IA = IA + 1024
IT = IA256
HAPS(1) = HEXOF(IAPS(1))

3780 CONTINUE
IF (ERR.NE.0) CALL GCRCLS
EXIT = .FALSE.
ICH = MENUFM()
3781 CONTINUE
IF (ICH.EQ.6.OR.ABORT.OR.ESCAPE.OR.INTRPT) THEN
GOTO 2
ENDIF
3782 CONTINUE
CALL CRCLS
PRINT *,' WHICH CONDITIONAL? (CompVal1 COND TstVal AND '
PRINT *,'
TstVal COND CompVal2 => Replace)'
PRINT *,' 1) *nop* '
PRINT *,' 2) HI
'
PRINT *,' 3) LS
'
PRINT *,' 4) CC [HS]'
PRINT *,' 5) CS [LO]'
PRINT *,' 6) *nop* '
PRINT *,' 7) *nop* '
PRINT *,' 8) VC
'
PRINT *,' 9) VS
'
PRINT *,' 10) PL <== '
PRINT *,' 11) MI
'
PRINT *,' 12) GE
'
PRINT *,' 13) LT
'
PRINT *,' 14) GT
'
PRINT *,' 15) LE
'
CONFRM = .TRUE.
ICND = MENU(10,0,15)
3783 CONTINUE
PRINT *,' Comparison value #1 ? (0 .. 65535; range MASKED)'
READ (*,'(A)',ERR=3783) GDUNGE
ICMP = INTOF(GDUNGE)
ICMP = IAND(ICMP,$0FFFF)
3785 CONTINUE
PRINT *,' Comparison value #2 ? (0 .. 65535; range MASKED)'
READ (*,'(A)',ERR=3785) GDUNGE
ICMP2 = INTOF(GDUNGE)
ICMP2 = IAND(ICMP2,$0FFFF)
3784 CONTINUE
IF (ZAP) THEN
IHIT = 0
ELSE
PRINT *,' Replacement value? (0 .. 16383; range MASKED)'
READ (*,'(A)',ERR=3783) GDUNGE
IHIT = INTOF(GDUNGE)
IHIT = IAND(IHIT,$03FFF)
ENDIF
3789 CONTINUE
IT = IAPS(ICH)
*
TYPS(ICH) = TYPFRM
IXL = LENXS(ICH)
IYL = LENYS(ICH)
LLL = IXL*IYL
IF (LLL.LE.0.AND.ICH.GE.1.AND.ICH.LE.12) LLL = LENFR
IF (ICND.EQ.2) THEN
CALL I2HIH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.3) THEN
CALL I2LSH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.4) THEN

CALL I2CCH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.5) THEN
CALL I2CSH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.8) THEN
CALL I2VCH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.9) THEN
CALL I2VSH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.10) THEN
CALL I2PLH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.11) THEN
CALL I2MIH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.12) THEN
CALL I2GEH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.13) THEN
CALL I2LTH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.14) THEN
CALL I2GTH2(IT,LLL,ICMP,ICMP2,IHIT)
ELSEIF (ICND.EQ.15) THEN
CALL I2LEH2(IT,LLL,ICMP,ICMP2,IHIT)
ENDIF
IF (EXIT) GOTO 2
GOTO 3772
2 CONTINUE
1000 CONTINUE
RETURN
*---------ENTRY C2D81T(ICHIN)
ICH = ICHIN
ZAP = .FALSE.
EXIT = .TRUE.
GOTO 3781
*---------ENTRY C2DH1T(ICHIN,ICOND,ICOMP,ICOMP2,IIHIT)
ICH = ICHIN
ICND = ICOND
ICMP = ICOMP
ICMP2 = ICOMP2
IHIT = IIHIT
EXIT = .TRUE.
ZAP = .FALSE.
GOTO 3789
*---------ENTRY C2DZBP(ICHIN,ICOND,ICOMP,ICOMP2)
ICH = ICHIN
ICND = ICOND
ICMP = ICOMP
ICMP2 = ICOMP2
IHIT = 0
EXIT = .TRUE.
ZAP = .TRUE.
GOTO 3789
END
*---------------------------------------------------------------------SUBROUTINE REDISP
CHARACTER*8 HEXOF,HAPS(32),FRMTYP(-2:20)*22,TC*1,TCALGN(2)*1
CHARACTER*20 FRAME
INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32)

INTEGER*4 TYPFRM,LENS(32),APS(0:7),LNS(0:7),MENUFM
INTEGER*4 LENFR,LENTR,NTR
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,ASC,SCAN,KBF1,KBF2,ERR,OPNUM
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32),DEFBUF
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,REPEAT,CHKADR
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,FOOB
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 (IA2,IAPS(2)),(IA4,IAPS(3)),(IZ,IZR,IAPS(4))
EQUIVALENCE (IMX,IAPS(5)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /BLKCNV/MAGNIF,LLHILO,CONTRS,BRIGHT,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/BUFDEF/DEFBUF
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/ APS,LNS,/OMACNT/IAPS,HAPS,LENS
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FRAMLN/,/OMABFL/,/OMATYP/,/OMAPAR/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/BUFDEF/
EXTERNAL MENUFM,BLKDSP,CHKADR
SAVE
3772 CONTINUE
IA256 = APS(0)
IA = IA256
*
IF (DATACQ) IA = IA + 1024
IT = IA256
HAPS(1) = HEXOF(IAPS(1))
3780 CONTINUE
IF (ERR.NE.0) CALL GCRCLS
EXIT = .FALSE.
ICH = MENUFM()
IJK = 0
3781 CONTINUE
IF (ICH.EQ.6.OR.ABORT.OR.ESCAPE.OR.INTRPT) THEN
GOTO 2
ENDIF
IT = IAPS(ICH)
IF (.NOT.CHKADR(IT)) THEN
IJK = IJK + 1
CALL USEPG0
CALL GRCLS
PRINT *,'REDISP: Buffer Address too low!'
CALL REALOC
IF (IJK.GT.2) RETURN
GOTO 3781
ENDIF
TYPFRM = TYPS(ICH)
IITYPE = TYPFRM
IXL = LENXS(ICH)

IYL = LENYS(ICH)
KXL = KADDR(IXL)
KYL = KADDR(IYL)
MAGNIF = 17
CONTRS = 0.0
BRIGHT = 0.0
REPEAT = .FALSE.
DEFBUF = ICH
IJIJ = FCALL3(BLKDSP,IT,KXL,KYL)
TYPFRM = IITYPE
IF (EXIT) GOTO 2
IF (IJIJ.EQ.911) THEN
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN
ERR = -1
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
GOTO 1000
ENDIF
IF (ICH.GT.0) GOTO 3781
ENDIF
GOTO 3772
2 CONTINUE
1000 CONTINUE
RETURN
*---------ENTRY RED1SP(ICHIN)
ICH = ICHIN
EXIT = .TRUE.
IJK = 0
GOTO 3781
END
*---------------------------------------------------------------------SUBROUTINE BUFSTA
CHARACTER*8 HAPS(32)
CHARACTER PADS*3,NCRUDQ*1,FRMTYP(-2:20)*22
CHARACTER TC*1,TCALGN(2)*1
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32)
INTEGER*4 TYPFRM,NFRAME,NDRIVE,LENS(32),APS(0:7),LNS(0:7)
INTEGER*4 LENFR,LENTR,NTR
INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,ASC,SCAN,KBF1,KBF2,ERR,OPNUM
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),PAUSES,FOOB
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PAWS/PAUSES
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/OMADSK/NDRIVE,NFRAME

COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FRAMLN/,/OMABFL/,/OMATYP/,/PAWS/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/OMADSK/
SAVE
CALL CRCLS
DO 7001 IBF = 1,22
IF (IBF.EQ.6) GOTO 7002
PRINT 8001,'#',IBF,' @ $',HAPS(IBF),'; length ',LENS(IBF)
&
,FRMTYP(TYPS(IBF)),LENXS(IBF),LENYS(IBF),BUFGUD(IBF),BUFUSE(IBF),FNRN
SN(IBF)
7002 CONTINUE
7001 CONTINUE
*
CALL PAUSE(' MORE ...')
PAUSES = .TRUE.
CALL ISNTRP
PAUSES = .FALSE.
IF (ASC.EQ.14.OR.SCAN.EQ.1.OR.ABORT.OR.ESCAPE.OR.INTRPT) GOTO 2
CALL CRCLS
DO 7003 IBF = 13,32
PRINT 8001,'#',IBF,' @ $',HAPS(IBF),' length ',LENS(IBF)
&
,FRMTYP(TYPS(IBF)),LENXS(IBF),LENYS(IBF),BUFGUD(IBF),BUFUSE(IBF),FNRN
SN(IBF)
7003 CONTINUE
*
CALL PAUSE(' NO More ')
PAUSES = .TRUE.
CALL ISNTRP
PAUSES = .FALSE.
2 CONTINUE
ERR = -1
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
RETURN
8001 FORMAT(A,I2.2,A,A,A,I6,1X,A,1X,I3,'x',I3,2X,L1,L1,1X,I7)
END
*---------------------------------------------------------------------SUBROUTINE FASTOR
CHARACTER*8 HEXOF,RESULT,INPUT,HEXARR(10),HAPS(32)
CHARACTER PADS*3,NCRUDQ*1,FRAME*20,FRMTYP(-2:20)*22,DFRAME*20
CHARACTER TC*1,TCALGN(2)*1,OPMESS*36
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,RUNNUM
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32),SHOTNO
INTEGER*4 TYPFRM,NFRAME,NDRIVE,LENS(32),APS(0:7),LNS(0:7)
INTEGER*4 LENFR,LENTR,NTR,INTOF,KADDR,MENUFM
INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS,KTEST3
INTEGER*2 TYP(3),ICHS(3),IASC,ISCAN,IKBF1,IKBF2,IERR,I2
INTEGER*2 LENXS(32),LENYS(32),FNRNSN(32)
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET,FO
OB
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,CONFRM
LOGICAL*1 ASCII
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/CNFRM/CONFRM
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/OMADSK/NDRIVE,NFRAME
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/FILES/DFRAME,RUNNUM,SHOTNO
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPR2/,/FRAMLN/,/OMABFL/,/OMATYP/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/OMADSK/,/CNFRM/
EXTERNAL ISTACK,HEXOF,I2AND2,KADDR,MENUFM,KTEST3
SAVE
IA = APS(0)
IF (DATACQ) IA = IA + 1024
IT = APS(0)
HAPS(1) = HEXOF(IAPS(1))
LEN = LENFR*2
N = NFRAME + 1
IDRIVE = NDRIVE
4942 CONTINUE
4950 CONTINUE
CALL GCRCLS
ICH = MENUFM()
EXIT = .FALSE.
ASCII = .FALSE.
4951 CONTINUE
IF (ICH.EQ.6.OR.ABORT.OR.ESCAPE.OR.INTRPT) THEN
NDRIVE = IDRIVE
IF (NFRAME.LT.0) NFRAME = N
GOTO 2
ENDIF
IF (EXIT) THEN
CALL CLLINE(22,12)
CALL CLLINE(21,12)
CALL CLLINE(20,12)
CALL GOTOXY(0,20)
ENDIF
PRINT *,' STORE as which file? (FRAMEnnn.DAT, nnn = 0 .. 999)'
PRINT *,'
or Run xxx, Shot yyy (RxxxSyyy, INPUT AS xxxyyy)'
IF (N.LE.999) THEN
PRINT *,' default nnn = ',N,' (0=DEFAULT, invalid input => ABORT)'
ELSE
RUNNUM = N/1000
SHOTNO = MOD(N,1000)
PRINT *,' default is Run xxx = ',RUNNUM,' Shot yyy = ',SHOTNO
ENDIF
READ (*,'(BN,I8)',ERR=4942) NN
*
IF (NN.LT.0.OR.NN.GT.999) GOTO 4942
IF (NN.LT.0) GOTO 4942
IF (NN.EQ.0) NN = N
N = NN

IF (EXIT) THEN
CALL CLLINE(22,12)
CALL CLLINE(21,12)
CALL CLLINE(20,12)
CALL GOTOXY(0,20)
ENDIF
IF (N.LE.999) THEN
PRINT *,' STORING FRAME #',N
ELSE
RUNNUM = N/1000
SHOTNO = MOD(N,1000)
PRINT *,' STORING FRAME for RUN #',RUNNUM,' & SHOT #',SHOTNO
ENDIF
PRINT *,' Store to WHICH DRIVE? (0..9; -1,10=default drive; ^C=ABORT)'
CONFRM = .TRUE.
IDR = LMENU(-2,-2,10)
IF (INTRPT.OR.ESCAPE) RETURN
IF (IDR.EQ.-2) THEN
IDR = IDRIVE
IF (ASC.EQ.$30) IDR = 0
IF (SCAN.EQ.$1C) IDR = IDRIVE
ELSEIF (IDR.EQ.10) THEN
IDR = -1
ENDIF
NDRIVE = IDR
4999 CONTINUE
N = NN
IDRIVE = IDR
IT = IAPS(ICH)
TYPFRM = TYPS(ICH)
IXL = LENXS(ICH)
IYL = LENYS(ICH)
IF (ASCII) THEN
CALL ISTAFM(IT,IXL,IYL,TYPFRM,NN,IDR)
ELSE
CALL IST0FM(IT,IXL,IYL,TYPFRM,NN,IDR)
ENDIF
IF (NN.LT.0) THEN
CALL CRCLS
CALL BEEP
PRINT *,' ERROR STORING FRAME, ERROR CODE = ',NN
CALL BEEP
IF (NN.EQ.-1) THEN
PRINT *,'Could not successfully open Frame File.'
ELSEIF (NN.EQ.-2) THEN
PRINT *,'Write error occurred while writing frame header.'
ELSEIF (NN.EQ.-3) THEN
PRINT *,'Write error occurred while writing frame data.'
ENDIF
CALL WAIT(0.85)
CALL BEEP
ELSE
PRINT *,' FRAME STORED SUCCESSFULLY'
FNRNSN(ICH) = N
NFRAME = N
N = N + 1
ENDIF
IF (EXIT) GOTO 2
CALL WAITQ(0.85)
ICH = KTEST3(-1,0,31)

IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN
ERR = -1
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
GOTO 1000
ENDIF
IF (ICH.GT.0) GOTO 4951
GOTO 4942
2 CONTINUE
1000 CONTINUE
RETURN
*---------ENTRY FASTAR(ICHIN)
N = NFRAME + 1
IDRIVE = NDRIVE
NN = N
IDR = IDRIVE
ICH = ICHIN
EXIT = .TRUE.
ASCII = .TRUE.
GOTO 4951
*---------ENTRY FAST0R(ICHIN)
N = NFRAME + 1
IDRIVE = NDRIVE
NN = N
IDR = IDRIVE
ICH = ICHIN
EXIT = .TRUE.
ASCII = .FALSE.
GOTO 4951
*---------ENTRY FBST0R(ICHIN,INN,IIDR)
ICH = ICHIN
NN = INN
IDR = IIDR
IDRIVE = IDR
N = NN
EXIT = .TRUE.
ASCII = .FALSE.
GOTO 4999
*---------ENTRY FBSTAR(ICHIN,INN,IIDR)
ICH = ICHIN
NN = INN
IDR = IIDR
IDRIVE = IDR
N = NN
EXIT = .TRUE.
ASCII = .TRUE.
GOTO 4999
END
*---------------------------------------------------------------------SUBROUTINE FASGET
CHARACTER*8 HEXOF,RESULT,INPUT,HEXARR(10),HAPS(32)
CHARACTER*20 PADS*3,NCRUDQ*1,FRAME,FRMTYP(-2:20)*22,DFRAME,ERMESS(-3:-1)
CHARACTER TC*1,TCALGN(2)*1,OPMESS*36
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,RUNNUM
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3

INTEGER*4
INTEGER*4
INTEGER*4
INTEGER*4
INTEGER*2
INTEGER*2
INTEGER*2
LOGICAL*4
LOGICAL*2

LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32),SHOTNO
TYPFRM,NFRAME,NDRIVE,LENS(32),APS(0:7),LNS(0:7)
LENFR,LENTR,NTR,INTOF,KADDR,MENUFM
IXNUM,IYNUM,IA128,SENDAT,SENBAS,KTEST3
TYP(3),ICHS(3),IASC,ISCAN,IKBF1,IKBF2,IERR,I2
ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32)
LENXS(32),LENYS(32),FNRNSN(32)
INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,INYET,FO

OB
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,CONFRM
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/CNFRM/CONFRM
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/OMADSK/NDRIVE,NFRAME
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/KTESTS/INYET,FOOB
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/FILES/DFRAME,RUNNUM,SHOTNO
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPR2/,/FRAMLN/,/OMABFL/,/OMATYP/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/,/OMADSK/,/CNFRM/
EXTERNAL ISTACK,HEXOF,I2AND2,KADDR,MENUFM,KTEST3
SAVE
DATA ERMESS(-3)/'READ ERROR, data'/,ERMESS(-2)/'READ ERROR, header'/
DATA ERMESS(-1)/'File NOT FOUND'/
IA = APS(0)
IF (DATACQ) IA = IA + 1024
IT = APS(0)
HAPS(1) = HEXOF(IAPS(1))
LEN = LENFR*2
N = NFRAME + 1
IDRIVE = NDRIVE
4942 CONTINUE
4950 CONTINUE
CALL GCRCLS
ICH = MENUFM()
EXIT = .FALSE.
4951 CONTINUE
IF (ICH.EQ.6.OR.ABORT.OR.ESCAPE.OR.INTRPT) THEN
NDRIVE = IDRIVE
IF (NFRAME.LT.0) NFRAME = N
GOTO 2
ENDIF
IT = IAPS(ICH)
IF (EXIT) THEN
CALL CLLINE(22,12)
CALL CLLINE(21,12)
CALL CLLINE(20,12)

CALL GOTOXY(0,20)
ENDIF
PRINT *,' GET from which file? (FRAMEnnn.DAT, nnn = 0 .. 999)'
PRINT *,'
or Run xxx, Shot yyy (RxxxSyyy, INPUT AS xxxyyy)'
IF (N.LE.999) THEN
PRINT *,' default nnn = ',N,' (0=DEFAULT, invalid input => ABORT)'
ELSE
RUNNUM = N/1000
SHOTNO = MOD(N,1000)
PRINT *,' default is Run xxx = ',RUNNUM,' Shot yyy = ',SHOTNO
ENDIF
READ (*,'(BN,I8)',ERR=4942) NN
*
IF (NN.LT.0.OR.NN.GT.999) GOTO 4942
IF (NN.LT.0) GOTO 4942
IF (NN.EQ.0) NN = N
N = NN
IF (EXIT) THEN
CALL CLLINE(22,12)
CALL CLLINE(21,12)
CALL CLLINE(20,12)
CALL GOTOXY(0,20)
ENDIF
IF (N.LE.999) THEN
PRINT *,' GETTING FRAME #',N
ELSE
RUNNUM = N/1000
SHOTNO = MOD(N,1000)
PRINT *,' GETTING FRAME for RUN #',RUNNUM,' & SHOT #',SHOTNO
ENDIF
PRINT *,' Get from WHICH DRIVE? (0..7; -1,10=default drive; ^C=ABORT)'
CONFRM = .TRUE.
IDR = LMENU(-2,-2,10)
IF (INTRPT.OR.ESCAPE) RETURN
IF (IDR.EQ.-2) THEN
IDR = IDRIVE
IF (ASC.EQ.$30) IDR = 0
IF (SCAN.EQ.$1C) IDR = IDRIVE
ELSEIF (IDR.EQ.10) THEN
IDR = -1
ENDIF
NDRIVE = IDR
4999 CONTINUE
N = NN
5000 CONTINUE
IDRIVE = IDR
IT = IAPS(ICH)
CALL IG3TFM(IT,IXL,IYL,TYPFRM,NN,IDR)
IF (NN.GE.0) THEN
TYPS(ICH) = TYPFRM
LENXS(ICH) = IXL
LENYS(ICH) = IYL
PRINT *,' FRAME GOTTEN SUCCESSFULLY'
FNRNSN(ICH) = N
NFRAME = N
N = N + 1
ELSEIF (IDR.NE.-1.AND.IDRIVE.NE.-1) THEN
NN = N
IDR = -1
GOTO 5000
ELSE

CALL CRCLS
PRINT *,' ERROR GETTING FRAME, ERROR = ',ERMESS(NN)
CALL BEEP
CALL WAIT(1.85)
CALL BEEP
IF (EXIT) INTRPT = .TRUE.
IDRIVE = -1
ENDIF
IF (EXIT) GOTO 2
CALL WAITQ(0.85)
ICH = KTEST3(-1,0,31)
IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN
ERR = -1
ABORT = .FALSE.
ESCAPE = .FALSE.
INTRPT = .FALSE.
GOTO 1000
ENDIF
IF (ICH.GT.0) GOTO 4951
GOTO 4942
2 CONTINUE
1000 CONTINUE
RETURN
*---------ENTRY FASG3T(ICHIN)
N = NFRAME + 1
IDRIVE = NDRIVE
NN = N
IDR = IDRIVE
ICH = ICHIN
EXIT = .TRUE.
GOTO 4951
*---------ENTRY FBSG3T(ICHIN,INN,IIDR)
ICH = ICHIN
NN = INN
IDR = IIDR
N = NN
IDRIVE = IDR
EXIT = .TRUE.
GOTO 4999
END
*---------------------------------------------------------------------SUBROUTINE CROP2(ARRAY,LX,LY,XS,XE,YS,YE)
INTEGER*4 ARRAY,LX,LY,XS,XE,YS,YE,KADDR
IDST = KADDR(ARRAY)
GOTO 9999
*---------ENTRY ICROP2(JDST,LX,LY,XS,XE,YS,YE)
ENTRY ICRP2(JDST,LX,LY,XS,XE,YS,YE)
IDST = JDST
9999 CONTINUE
IF (IDST.LT.$0E000) RETURN
IF (LX.LE.0.OR.LX.GT.512.OR.LY.LE.0.OR.LY.GT.256) RETURN
IF (YS.LE.0.OR.YS.GT.LY) YS = 1
IF (YE.LE.0.OR.YE.GT.LY) YE = LY
IF (XS.LE.0.OR.XS.GT.LX) XS = 1
IF (XE.LE.0.OR.XE.GT.LX) XE = LX
IF (YS.LT.YE) CALL ICRP2Y(IDST,LX,LY,YS,YE)
IF (XS.EQ.XE) RETURN

CALL ICRP2X(IDST,LX,LY,XS,XE)
RETURN
END
*---------------------------------------------------------------------SUBROUTINE CROP2Y(ARRAY,LX,LY,YS,YE)
INTEGER*4 ARRAY,LX,LY,YS,YE,KADDR
IDST = KADDR(ARRAY)
GOTO 9999
*---------ENTRY ICRP2Y(JDST,LX,LY,YS,YE)
IDST = JDST
9999 CONTINUE
IF (IDST.LT.$0E000) RETURN
IF (LX.LE.0.OR.LX.GT.512.OR.LY.LE.0.OR.LY.GT.256) RETURN
IF (YS.LE.0.OR.YS.GT.LY) YS = 1
IF (YE.LE.0.OR.YE.GT.LY) YE = LY
IF (YS.EQ.1.AND.YE.EQ.LY) RETURN
IF (YS.EQ.YE) RETURN
ISRC = IDST + (YS-1)*LX*2
ILEN = (YE-YS+1)*LX*2
JLEN = ((ILEN+3)/4)*4
CALL IICOPY(ISRC,IDST,JLEN)
LY = YE - YS + 1
RETURN
END
*---------------------------------------------------------------------SUBROUTINE CROP2X(ARRAY,LX,LY,XS,XE)
INTEGER*4 ARRAY,LX,LY,XS,XE,KADDR
IDST = KADDR(ARRAY)
GOTO 9999
*---------ENTRY ICRP2X(JDST,LX,LY,XS,XE)
IDST = JDST
9999 CONTINUE
IF (IDST.LT.$0E000) RETURN
IF (LX.LE.0.OR.LX.GT.512.OR.LY.LE.0.OR.LY.GT.256) RETURN
IF (XS.LE.0.OR.XS.GT.LX) XS = 1
IF (XE.LE.0.OR.XE.GT.LX) XE = LX
IF (XS.EQ.1.AND.XE.EQ.LX) RETURN
IF (XS.EQ.XE) RETURN
ISRC = IDST + (XS-1)*2
ILEN = (XE-XS+1)*2
JLEN = ((ILEN+3)/4)*4
ISRCOF = LX*2
DO 1 I = 1,LY
KLEN = JLEN
KSRC = ISRC
KDST = IDST
CALL IICOPY(KSRC,KDST,KLEN)
ISRC = ISRC + ISRCOF
IDST = IDST + ILEN
1 CONTINUE
LX = XE - XS + 1
RETURN
END
*---------------------------------------------------------------------SUBROUTINE ROTBUF(BUFFER,IROT,X,Y)
INTEGER*4 IROT,X,Y,KADDR,KBUF,ALLOC,ITEMP,IEND,ITER
INTEGER*2 BUFFER(X,Y)
LOGICAL*1 FLAG

EXTERNAL KADDR,ALLOC,IICOPY,IIYPOC,RLSE
KBUF = KADDR(BUFFER(1,1))
GOTO 9999
*---------ENTRY IRTBUF(IIBUF,IROT,X,Y)
KBUF = IIBUF
9999 CONTINUE
ITR = 0
ITER = 1
I = 0
KBUF = (KBUF/2)*2
IF (KBUF.LT.$0E000) THEN
WRITE (11,*) 'ROTBUF: BUFFER ADDRESS INVALID (TOO LOW)'
CALL WAIT(1.0)
RETURN
ENDIF
LENBUF = X*Y
9998 CONTINUE
I = I + 1
JROT = MOD(IROT,LENBUF)
IF (JROT.EQ.0.OR.JROT.EQ.1.OR.JROT.EQ.-1) RETURN
ILEN = IABS(JROT)
IF (ILEN*2.GT.LENBUF.AND.I.LT.2) THEN
JRT = JROT/ILEN
IROT = (ILEN-LENBUF)*JRT
GOTO 9998
ENDIF
MARK = ALLOC(0)
FLAG = .FALSE.
LENS = ILEN
9996 CONTINUE
JROTB = ILEN*2
KLEN = ((JROTB+3)/4)*4
JLEN = LENBUF*2 - JROTB
LLEN = ((JLEN+3)/4)*4
IEND = KBUF + LENBUF*2
*
ITEMP = ALLOC(KLEN+216)
ITEMP = ALLOC(KLEN+16)
I = ITEMP
IF (I.EQ.0) THEN
FLAG = .TRUE.
ITR = ITR + 1
ITER = 2**ITR
ILEN = (LENS+ITER-1)/ITER
IF (ITR.LE.4) GOTO 9996
RETURN
ENDIF
IC = 0
9997 CONTINUE
IC = IC + 1
IF (FLAG.AND.IC.EQ.ITER) THEN
ILEN = LENS - (ITER-1)*ILEN
JROTB = ILEN*2
KLEN = ((JROTB+3)/4)*4
JLEN = LENBUF*2 - JROTB
LLEN = ((JLEN+3)/4)*4
ENDIF
IF (JROT.GT.0) THEN
I = IEND - JROTB
CALL IICOPY(I,ITEMP,KLEN+4)

I = ITEMP + KLEN
CALL IICOPY(KBUF,I,4)
I = KBUF + JROTB
CALL IIYPOC(KBUF,I,LLEN)
CALL IICOPY(ITEMP,KBUF,KLEN)
ELSEIF (JROT.LT.0) THEN
CALL IICOPY(KBUF,ITEMP,KLEN+4)
I = KBUF + JROTB
CALL IICOPY(I,KBUF,LLEN)
I = IEND - JROTB
CALL IICOPY(ITEMP,I,KLEN)
ENDIF
IF (FLAG.AND.IC.LT.ITER) GOTO 9997
CALL RLSE(MARK)
RETURN
END
*---------------------------------------------------------------------$DEBUG
SUBROUTINE FLIP(ICH)
ENTRY FLIPS(ICH)
CHARACTER*8 HAPS(32)
CHARACTER*20 PADS*3,NCRUDQ*1,FRAME,FRMTYP(-2:20)*22
CHARACTER TC*1,TCALGN(2)*1
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,ICH
INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3
INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32)
INTEGER*4 TYPFRM,LENS(32),APS(0:7),LNS(0:7),IT,NX,NY
INTEGER*4 LENFR,LENTR,NTR
INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS
INTEGER*2 TYP(3),ICHS(3),IASC,ISCAN,IKBF1,IKBF2,IERR,I2
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32)
INTEGER*2 LENXS(32),LENYS(32),FNRNSN(32)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32)
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)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8))
EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12))
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,
IA128,SENBAS,SENDAT
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMABFL/BUFGUD,BUFUSE
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS
SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMABFL/,/OMATYP/
SAVE /ZEROS/,/OMACNT/,/AMPLS/,/XFRAME/,/OMABFR/
EXTERNAL IFLPUD,IFLPLR,IFLPDI
SAVE
*
CALL GOTOXY(0,0)

CALL CLS
PRINT *,' FLIPping IMAGE - options are bit coded:'
PRINT *,'
1 = Left/Right
'
PRINT *,'
2 = Up/Down
'
PRINT *,'
4 = Diagonal
'
I = MENU(-1,0,7)
IF (I.EQ.-1) THEN
PRINT *,' No FLIPping performed.'
ELSE
IF (MOD(I,2).EQ.1) THEN
IT = IAPS(ICH)
NX = LENXS(ICH)
NY = LENYS(ICH)
PRINT *,' FLIPping Left/Right '
CALL IFLPLR(IT,NX,NY)
ENDIF
IF (MOD(I/2,2).EQ.1) THEN
IT = IAPS(ICH)
NX = LENXS(ICH)
NY = LENYS(ICH)
PRINT *,' FLIPping Up/Down '
CALL IFLPUD(IT,NX,NY)
ENDIF
IF (MOD(I/4,2).EQ.1) THEN
IT = IAPS(ICH)
NX = LENXS(ICH)
NY = LENYS(ICH)
PRINT *,' FLIPping Diagonal '
CALL IFLPDI(IT,NX,NY)
I = LENXS(ICH)
LENXS(ICH) = LENYS(ICH)
LENYS(ICH) = I
ENDIF
I = FNRNSN(ICH)
FNRNSN(ICH) = - IABS(I)
ENDIF
RETURN
END
*---------------------------------------------------------------------SUBROUTINE IFLPUD(IIIT,X,Y)
INTEGER*4 IIIT,IIT,X,Y,IX,IY,KADDR
EXTERNAL CALL3,FLIPUD,FLIPLR,FLIPDI
*
IIT = IIIT
IX = KADDR(X)
IY = KADDR(Y)
CALL CALL3(FLIPUD,IIT,IX,IY)
RETURN
*---------ENTRY IFLPLR(IIIT,X,Y)
IIT = IIIT
IX = KADDR(X)
IY = KADDR(Y)
CALL CALL3(FLIPLR,IIT,IX,IY)
RETURN
*---------ENTRY IFLPDI(IIIT,X,Y)
IIT = IIIT
IX = KADDR(X)
IY = KADDR(Y)

CALL CALL3(FLIPDI,IIT,IX,IY)
RETURN
END
*---------------------------------------------------------------------SUBROUTINE FLIPUD(IT,X,Y)
INTEGER*4 X,Y,M,K,L
INTEGER*2 IT(X,Y),TEMP,I,J
INTEGER*2 R500(32768)
COMMON /PARPLZ/R500
SAVE /PARPLZ/
*
DO 1 J = 1,(Y/2)
DO 2 I = 1,X
TEMP = IT(I,J)
IT(I,J) = IT(I,Y-J+1)
IT(I,Y-J+1) = TEMP
2
CONTINUE
1 CONTINUE
RETURN
*---------ENTRY FLIPLR(IT,X,Y)
DO 11 I = 1,(X/2)
DO 22 J = 1,Y
TEMP = IT(I,J)
IT(I,J) = IT(X-I+1,J)
IT(X-I+1,J) = TEMP
22
CONTINUE
11 CONTINUE
RETURN
*---------ENTRY FLIPDI(IT,X,Y)
IF ((X*Y).LE.32768) THEN
DO 113 I = 1,X
DO 223 J = 1,Y
R500(J - 1 + (I - 1)*Y) = IT(I,J)
223
CONTINUE
113
CONTINUE
DO 1113 I = 1,X
DO 2223 J = 1,Y
IT(I,J) = R500(I - 1 + (J - 1)*X)
2223
CONTINUE
1113
CONTINUE
ELSE
IF (X.GE.Y) THEN
DO 111 I = 1,X
DO 222 J = 1,MIN(0+Y,I-1)
M = J - 1 + (I - 1)*Y
K = MOD(M,X) + 1
L = M/X + 1
TEMP = IT(I,J)
IT(I,J) = IT(K,L)
IT(K,L) = TEMP
222
CONTINUE
111
CONTINUE
ELSE
DO 1111 J = 2,Y
DO 2222 I = 1,MIN(0+X,J-1)
M = J - 1 + (I - 1)*Y
K = MOD(M,X) + 1
L = M/X + 1

TEMP = IT(I,J)
IT(I,J) = IT(K,L)
IT(K,L) = TEMP
2222
CONTINUE
1111
CONTINUE
ENDIF
ENDIF
RETURN
END
*---------------------------------------------------------------------$NODEBUG
SUBROUTINE INRMTO(IIT,X,Y,NRMVAL,OFFSET)
INTEGER*4 IIT,X,Y,NRMVAL,OFFSET,KADDR,IX,IY,INRMV,IOFF
EXTERNAL CALL5,NRMTO,SLFNRM
IX = KADDR(X)
IY = KADDR(Y)
INRMV = KADDR(NRMVAL)
IOFF = KADDR(OFFSET)
CALL CALL5(NRMTO,IIT,IX,IY,INRMV,IOFF)
RETURN
*---------ENTRY NRMSLF(IIT,X,Y,NRMVAL,OFFSET)
IX = KADDR(X)
IY = KADDR(Y)
INRMV = KADDR(NRMVAL)
IOFF = KADDR(OFFSET)
CALL CALL5(SLFNRM,IIT,IX,IY,INRMV,IOFF)
RETURN
END
*---------------------------------------------------------------------SUBROUTINE NRMTO(IT,X,Y,NRMVAL,OFFSET)
INTEGER*4 X,Y,NRMVAL,MODE,IIT,KADDR,ISM,IAND,OFFSET
INTEGER*2 IT(X,Y),BIG,SMALL,RANGE,BIG2,SMALL2,I16384
LOGICAL*1 SELF
COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384
SAVE /PARNML/,/PARNM2/
NRMVAL = IAND(NRMVAL,16383)
OFFSET = IAND(OFFSET,16383)
SELF = .FALSE.
9000 CONTINUE
CALL NORML2(IT,X,Y)
IF (SMALL.GT.BIG) RETURN
IF (SELF) THEN
NRMVAL = BIG
OFFSET = SMALL
ENDIF
IIT = KADDR(IT(1,1))
IJ = X*Y*2
IFILL = SMALL + SMALL*65536
CALL ISZB2T(IIT,IJ,IFILL)
IDIV = BIG - SMALL
IIT = KADDR(IT(1,1))
IJ = X*Y
CALL IMLDV(IIT,IJ,NRMVAL,IDIV)
IIT = KADDR(IT(1,1))
IJ = X*Y
ISM = NRMVAL
CALL ISMIH2(IIT,IJ,ISM,NRMVAL)
IF (OFFSET.GT.0) THEN
IIT = KADDR(IT(1,1))

IJ = X*Y*2
IFILL = OFFSET
CALL IADD2T(IIT,IJ,IFILL)
IIT = KADDR(IT(1,1))
IJ = X*Y
ISM = OFFSET
IFILL = OFFSET
CALL ISPLH2(IIT,IJ,ISM,IFILL)
ENDIF
RETURN
*---------ENTRY SLFNRM(IT,X,Y,NRMVAL,OFFSET)
SELF = .TRUE.
GOTO 9000
END
*---------------------------------------------------------------------SUBROUTINE INRMT0(IIT,X,Y,NRMVAL,OFFSET)
INTEGER*4 IIT,X,Y,NRMVAL,OFFSET,KADDR,IX,IY,INRMV,IOFF
EXTERNAL CALL5,NRMT0
IX = KADDR(X)
IY = KADDR(Y)
INRMV = KADDR(NRMVAL)
IOFF = KADDR(OFFSET)
CALL CALL5(NRMT0,IIT,IX,IY,INRMV,IOFF)
RETURN
END
*---------------------------------------------------------------------SUBROUTINE NRMT0(IT,X,Y,NRMVAL,OFFSET)
REAL TEST
INTEGER*4 X,Y,NRMVAL,OFFSET,MODE,IIT,KADDR,CUMUL(0:16383),IGNORE,ISM,IBG
INTEGER*4 IFILL,IAND
INTEGER*2 PROFIL(0:16383),IT(X,Y),BIG,SMALL,RANGE,BIG2,SMALL2,I16384
LOGICAL*1 FOO,BAR
COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384
COMMON /PARCUM/IGNORE,PROFIL,CUMUL
SAVE /PARNML/,/PARNM2/,/PARCUM/
BAR = .TRUE.
ISAVE = IGNORE
IGNORE = 200
NRMVAL = IAND(NRMVAL,16383)
OFFSET = IAND(OFFSET,16383)
9000 CALL NORML2(IT,X,Y)
IF (SMALL2.GT.BIG2) THEN
IGNORE = ISAVE
RETURN
ENDIF
ITEST = PROFIL(16383) + PROFIL(16382)
IF ((BIG2.GE.16380.OR.ITEST.NE.0).AND.BAR) THEN
BAR = .FALSE.
TEST = (PROFIL(16383)+0.0)/(X*Y)
FOO = TEST.LT.0.01
TEST = (BIG+0.0)/BIG2
FOO = TEST.LT.0.1 .OR. FOO
IF (FOO) THEN
IIT = KADDR(IT(1,1))
IJ = X*Y
CALL ISEQH2(IIT,IJ,16383,0)
TEST = (PROFIL(16382)+0.0)/(X*Y)
FOO = TEST.LT.0.01
TEST = (BIG+0.0)/BIG2

FOO = TEST.LT.0.1 .OR. FOO


IF (FOO) THEN
IIT = KADDR(IT(1,1))
IJ = X*Y
CALL ISEQH2(IIT,IJ,16382,0)
ENDIF
GOTO 9000
ENDIF
ENDIF
ISM = MIN(SMALL,SMALL2)
IBG = MAX(BIG,BIG2)
IIT = KADDR(IT(1,1))
IJ = X*Y*2
IFILL = ISM + ISM*65536
CALL ISZB2T(IIT,IJ,IFILL)
IDIV = IBG - ISM
IIT = KADDR(IT(1,1))
IJ = X*Y
CALL IMLDV(IIT,IJ,NRMVAL,IDIV)
IIT = KADDR(IT(1,1))
IJ = X*Y
ISM = NRMVAL
CALL ISMIH2(IIT,IJ,ISM,NRMVAL)
IF (OFFSET.GT.0) THEN
IIT = KADDR(IT(1,1))
IJ = X*Y*2
IFILL = OFFSET
CALL IADD2T(IIT,IJ,IFILL)
IIT = KADDR(IT(1,1))
IJ = X*Y
ISM = OFFSET
IFILL = OFFSET
CALL ISPLH2(IIT,IJ,ISM,IFILL)
ENDIF
RETURN
END
*---------------------------------------------------------------------$SEGMENT FRAMDISP
SUBROUTINE XPL0DE(SOURCE,TARGET,LX,LY,YSI,YEI,YMULTI,PL0TYP)
INTEGER*4 LX,LY,YSI,YEI,YMULTI,PL0TYP
REAL*4 TARGET(LX,2,LY)
INTEGER*2 SOURCE(LX,LY)
INTEGER*4 YS,YE,YMULT,PLOTYP,I,J,ICOUNT
YS = YSI
YE = YEI
YMULT = YMULTI
PLOTYP = PL0TYP
GOTO 9000
*---------ENTRY XPLOD3(SOURCE,TARGET,LX,LY,PL0TYP)
YS = 1
YE = LY
YMULT = 1
PLOTYP = PL0TYP
GOTO 9000
*---------ENTRY XPLODE(SOURCE,TARGET,LX,LY)
YS = 1
YE = LY
YMULT = 1

PLOTYP = 7
9000 CONTINUE
IF (YS.LE.0.OR.YS.GE.LY) YS = 1
IF (YE.LE.0.OR.YE.GE.LY) YE = LY
IF (YS.GT.YE) THEN
I = YS
YS = YE
YE = I
ELSEIF (YS.EQ.YE) THEN
YS = 1
YE = LY
ENDIF
IF (YMULT.LE.0.OR.YMULT.GT.(YE-YS)) YMULT = 1
ICOUNT = 0
CALL LEDSET(1)
DO 1 I = YS,YE,YMULT
DO 2 J = 1,LX
TARGET(J,1,I) = J
TARGET(J,2,I) = SOURCE(J,I)
2
CONTINUE
ICOUNT = ICOUNT + 1
CALL LEDUP
1 CONTINUE
CALL GRCLS
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(TARGET(1,1,1),LX,ICOUNT)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(TARGET(1,1,1),LX,ICOUNT)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(TARGET(1,1,1),LX,ICOUNT)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(TARGET(1,1,1),LX,ICOUNT)
ELSEIF (PLOTYP.EQ.6) THEN
CALL PLOTW(TARGET(1,1,1),LX,ICOUNT)
ELSEIF (PLOTYP.EQ.8) THEN
CALL MLTBLT(TARGET(1,1,1),LX,-ICOUNT)
ELSE
CALL MLTPLT(TARGET(1,1,1),LX,-ICOUNT)
ENDIF
CALL GRCLS
RETURN
END
*---------------------------------------------------------------------$SEGMENT SLICE_OP
SUBROUTINE PLTSLS(LIST,NUMBER)
CHARACTER*36 TMPFIL,FILNAM
CHARACTER*8 HEXOF,HAPS(32)
REAL*4 R500(16384)
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 RLOT1K(1024,2,8),RLT512(512,2,16),RLT256(256,2,32)
REAL*4 D170(170,120),D20480(20480)
INTEGER*4 LX,LY,FROM,TO,IAPS(32),LENS(32),KADDR,IIT,ILX,ILY,IFROM,ITO
INTEGER*4 BUFNO,FROM2,INDEX3,INDST3,NUMBER,COUNT,SIZE,IFROM2,K,LIM,INCR
INTEGER*4 FROMK,TOK
INTEGER*2 TAGS(80,4),FRAMTG(80),TYPTAG(80),WHERTG(80),NPNTAG(80),LIST(NUMB
ER)
INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32),PLOTYP

LOGICAL*1 DOZERO,RHO1,RHO2
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)),(R500(1),RLOT1K(1,1,1),RLT512(1,1,1),RLT
256(1,1,1))
COMMON /OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /WFMOUT/DATA,/PARPLZ/R500,/WFMTAG/TAGS
SAVE /WFMOUT/,/PARPLZ/,/OMACNT/,/OMATYP/,/WFMTAG/,PLOTYP
EXTERNAL XTR4CT,YTR4CT,CALL5,CALL6,XTR4MN,XTR3MD,XTR5MD,XTRNMD
EXTERNAL PLOTW,PLATW,MLTPLT,MLAPLT,FANCYP,PLOT49,PLAT49,DANWYI
SAVE
DATA PLOTYP/7/
COUNT = 0
SIZE = 0
DO 110 I = 1,NUMBER
J = LIST(I)
J = MOD(J-1,80) + 1
IF (NPNTAG(J).GT.0) THEN
COUNT = COUNT + 1
SIZE = MAX(SIZE,NPNTAG(J))
ENDIF
110 CONTINUE
*
IF (SIZE.LT.250) THEN
*
SIZE = 250
*
ELSE
*
SIZE = 500
*
ENDIF
I = INDST3(SIZE,2,COUNT)
PRINT *,'Doing ',COUNT,' slices of size ',SIZE
COUNT = 0
DO 111 II = 1,NUMBER
J = LIST(II)
J = MOD(J-1,80) + 1
IF (NPNTAG(J).GT.0) THEN
COUNT = COUNT + 1
IF (SIZE.LE.250) THEN
DO 112 I = 1,NPNTAG(J)
R500(INDEX3(I,1,COUNT)) = I
R500(INDEX3(I,2,COUNT)) = D250(I,J)
112
CONTINUE
DO 114 I = NPNTAG(J)+1,SIZE
R500(INDEX3(I,1,COUNT)) = NPNTAG(J)
R500(INDEX3(I,2,COUNT)) = D250(NPNTAG(J),J)
114
CONTINUE
ELSE
DO 113 I = 1,NPNTAG(J)
R500(INDEX3(I,1,COUNT)) = I
R500(INDEX3(I,2,COUNT)) = D500(I,J)
113
CONTINUE
DO 115 I = NPNTAG(J)+1,SIZE
R500(INDEX3(I,1,COUNT)) = NPNTAG(J)
R500(INDEX3(I,2,COUNT)) = D500(NPNTAG(J),J)
115
CONTINUE

ENDIF
ENDIF
111 CONTINUE
CALL GRCLS
IF (PLOTYP.EQ.1) THEN
CALL MLTPLT(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.2) THEN
CALL MLTBLT(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.5) THEN
CALL BLOTW(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.7) THEN
CALL MLTPLT(R500(1),SIZE,-COUNT)
ELSEIF (PLOTYP.EQ.8) THEN
CALL MLTBLT(R500(1),SIZE,-COUNT)
ELSEIF (PLOTYP.EQ.9) THEN
CALL PLOT49(R500(1),SIZE,COUNT)
ELSEIF (PLOTYP.EQ.10) THEN
CALL BARG49(R500(1),SIZE,COUNT)
ELSE
CALL PLOTW(R500(1),SIZE,COUNT)
ENDIF
CALL GRCLS
RETURN
*---------ENTRY XTRACT(BUFNO,FROM,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0.OR.BUFNO.LT.1.OR.BUFNO.GT.32) RETURN
IIT = IAPS(BUFNO)
IF (IIT.EQ.0) RETURN
ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
WHERTG(TO) = FROM
NPNTAG(TO) = LENXS(BUFNO)
CALL CALL5(XTR4CT,IIT,ILX,ILY,IFROM,ITO)
RETURN
*---------ENTRY XTRAMN(BUFNO,FROM,FROM2,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0.OR.BUFNO.LT.1.OR.BUFNO.GT.32) RETURN
IIT = IAPS(BUFNO)
IF (IIT.EQ.0) RETURN
ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
IFROM2 = KADDR(FROM2)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
WHERTG(TO) = (FROM+FROM2)/2
NPNTAG(TO) = LENXS(BUFNO)

CALL CALL6(XTR4MN,IIT,ILX,ILY,IFROM,IFROM2,ITO)
RETURN
*---------ENTRY XTRAMD(BUFNO,FROM,FROM2,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0.OR.BUFNO.LT.1.OR.BUFNO.GT.32) RETURN
IIT = IAPS(BUFNO)
IF (IIT.EQ.0) RETURN
ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
IFROM2 = KADDR(FROM2)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
NPNTAG(TO) = LENXS(BUFNO)
CALL CALL6(XTRNMD,IIT,ILX,ILY,IFROM,IFROM2,ITO)
WHERTG(TO) = (FROM+FROM2)/2
RETURN
*---------ENTRY XTRMD3(BUFNO,FROM,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0.OR.BUFNO.LT.1.OR.BUFNO.GT.32) RETURN
IIT = IAPS(BUFNO)
IF (IIT.EQ.0) RETURN
ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
WHERTG(TO) = FROM
NPNTAG(TO) = LENXS(BUFNO)
CALL CALL5(XTR3MD,IIT,ILX,ILY,IFROM,ITO)
RETURN
*---------ENTRY XTRMD5(BUFNO,FROM,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0.OR.BUFNO.LT.1.OR.BUFNO.GT.32) RETURN
IIT = IAPS(BUFNO)
IF (IIT.EQ.0) RETURN
ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
WHERTG(TO) = FROM
NPNTAG(TO) = LENXS(BUFNO)
CALL CALL5(XTR5MD,IIT,ILX,ILY,IFROM,ITO)
RETURN
*---------ENTRY YTRACT(BUFNO,FROM,TO)
LX = LENXS(BUFNO)
LY = LENYS(BUFNO)
IF (LX*LY.LE.0) RETURN
IIT = IAPS(BUFNO)

ILX = KADDR(LX)
ILY = KADDR(LY)
IFROM = KADDR(FROM)
ITO = KADDR(TO)
FRAMTG(TO) = FNRNSN(BUFNO)
TYPTAG(TO) = TYPS(BUFNO)
WHERTG(TO) = - FROM
NPNTAG(TO) = LY
CALL CALL5(YTR4CT,IIT,ILX,ILY,IFROM,ITO)
RETURN
*---------ENTRY CPYSLC(FROM,TO)
TO = MOD(TO-1,80) + 1
FROM = MOD(FROM-1,80) + 1
IF (NPNTAG(FROM).LE.250) THEN
DO 1 I = 1,NPNTAG(FROM)
D250(I,TO) = D250(I,FROM)
1
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 3 I = NPNTAG(FROM),250
D250(I,TO) = D250(I-1,TO)
3
CONTINUE
ENDIF
ELSE
DO 2 I = 1,NPNTAG(FROM)
D500(I,TO) = D500(I,FROM)
2
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 4 I = NPNTAG(FROM),500
D500(I,TO) = D500(I-1,TO)
4
CONTINUE
ENDIF
ENDIF
FRAMTG(TO) = FRAMTG(FROM)
TYPTAG(TO) = TYPTAG(FROM)
WHERTG(TO) = WHERTG(FROM)
NPNTAG(TO) = NPNTAG(FROM)
RETURN
*---------ENTRY SUBSLC(FROM,FROM2,TO)
TO = MOD(TO-1,80) + 1
FROM = MOD(FROM-1,80) + 1
FROM2 = MOD(FROM2-1,80) + 1
IF (NPNTAG(FROM).NE.NPNTAG(FROM2)) RETURN
IF (NPNTAG(FROM).LE.250) THEN
DO 11 I = 1,NPNTAG(FROM)
D250(I,TO) = D250(I,FROM) - D250(I,FROM2)
11
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 13 I = NPNTAG(FROM),250
D250(I,TO) = D250(I-1,TO)
13
CONTINUE
ENDIF
ELSE
DO 12 I = 1,NPNTAG(FROM)
D500(I,TO) = D500(I,FROM) - D250(I,FROM2)
12
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 14 I = NPNTAG(FROM),500
D500(I,TO) = D500(I-1,TO)

14

CONTINUE
ENDIF
ENDIF
FRAMTG(TO) = 0
TYPTAG(TO) = 0
WHERTG(TO) = 0
NPNTAG(TO) = NPNTAG(FROM)
RETURN
*---------ENTRY SZBSLC(FROM,FROM2,TO)
TO = MOD(TO-1,80) + 1
FROM = MOD(FROM-1,80) + 1
FROM2 = MOD(FROM2-1,80) + 1
IF (NPNTAG(FROM).NE.NPNTAG(FROM2)) RETURN
IF (NPNTAG(FROM).LE.250) THEN
DO 21 I = 1,NPNTAG(FROM)
D250(I,TO) = D250(I,FROM) - D250(I,FROM2)
IF (D250(I,TO).LT.0.0) D250(I,TO) = 0.0
21
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 23 I = NPNTAG(FROM),250
D250(I,TO) = D250(I-1,TO)
23
CONTINUE
ENDIF
ELSE
DO 22 I = 1,NPNTAG(FROM)
D500(I,TO) = D500(I,FROM) - D250(I,FROM2)
IF (D500(I,TO).LT.0.0) D500(I,TO) = 0.0
22
CONTINUE
IF (NPNTAG(FROM).GT.1) THEN
DO 24 I = NPNTAG(FROM),500
D500(I,TO) = D500(I-1,TO)
24
CONTINUE
ENDIF
ENDIF
FRAMTG(TO) = 0
TYPTAG(TO) = 0
WHERTG(TO) = 0
NPNTAG(TO) = NPNTAG(FROM)
RETURN
*---------ENTRY CPYSLS(FROM,TO,FROM2)
IF (FROM2.LT.0) THEN
LIM = FROM2+1
INCR = -1
ELSEIF (FROM2.GE.0) THEN
LIM = FROM2-1
INCR = 1
ENDIF
DO 35 K = 0,FROM2+1,INCR
TOK = MOD(TO+K-1,80) + 1
FROMK = MOD(FROM+K-1,80) + 1
IF (NPNTAG(FROMK).LE.250) THEN
DO 31 I = 1,NPNTAG(FROMK)
D250(I,TOK) = D250(I,FROMK)
31
CONTINUE
IF (NPNTAG(FROMK).GT.1) THEN
DO 33 I = NPNTAG(FROMK),250
D250(I,TOK) = D250(I-1,TOK)
33
CONTINUE

ENDIF
ELSE
TOK = MOD(TOK-1,40) + 1
FROMK = MOD(FROMK-1,40) + 1
DO 32 I = 1,NPNTAG(FROMK)
D500(I,TOK) = D500(I,FROMK)
32
CONTINUE
IF (NPNTAG(FROMK).GT.1) THEN
DO 34 I = NPNTAG(FROMK),500
D500(I,TOK) = D500(I-1,TOK)
34
CONTINUE
ENDIF
ENDIF
FRAMTG(TOK) = FRAMTG(FROMK)
TYPTAG(TOK) = TYPTAG(FROMK)
WHERTG(TOK) = WHERTG(FROMK)
NPNTAG(TOK) = NPNTAG(FROMK)
35 CONTINUE
RETURN
*---------ENTRY ERASLS(FROM,TO)
TO = MOD(TO-1,80) + 1
FROM = MOD(FROM-1,80) + 1
INCR = 1
IF (TO.LT.FROM) INCR = -1
DO 41 K = FROM,TO,INCR
FRAMTG(K) = 0
TYPTAG(K) = 0
WHERTG(K) = 0
NPNTAG(K) = 0
41 CONTINUE
RETURN
*---------ENTRY SPLSLC
CALL GOTOXY(0,0)
CALL CLS
PRINT *,' Choose plot mode: 1 - MultiWindow Line plots'
PRINT *,'
2 - MultiWindow Solid plots'
PRINT *,'
3 - Fancy Window Line plots'
PRINT *,'
4 - Fancy Window Solid plots'
PRINT *,'
5 - Full Screen, Solid if single'
PRINT *,'
6 - Full Screen, Line plot'
PRINT *,'
7 - Multiple Line plots, identical scaling'
PRINT *,'
8 - Multiple Solid plots identical scaling'
PRINT *,'
9 - Multiple Line plots, individual scaling'
PRINT *,'
10 - Multiple Solid plots individual scaling'
PRINT *,' DEFAULT = CURRENT = ',PLOTYP
I = PLOTYP
PLOTYP = MENU(I,0,10)
PRINT *,'PLOT MODE = ',PLOTYP
RETURN
*---------ENTRY RPLTYP(IRETPL)
IRETPL = PLOTYP
RETURN
*---------ENTRY PLTSLC(FROM)
FROM = MOD(FROM-1,80) + 1
IF (NPNTAG(FROM).LE.0) RETURN
SIZE = NPNTAG(FROM)

I = INDST3(SIZE,2,1)
IF (NPNTAG.LE.250) THEN
DO 100 I = 1,NPNTAG(FROM)
R500(INDEX3(I,1,1)) = I
R500(INDEX3(I,2,1)) = D250(I,FROM)
100
CONTINUE
ELSE
DO 101 I = 1,NPNTAG(FROM)
R500(INDEX3(I,1,1)) = I
R500(INDEX3(I,2,1)) = D500(I,FROM)
101
CONTINUE
ENDIF
CALL GRCLS
IF (PLOTYP.EQ.1.OR.PLOTYP.EQ.7) THEN
CALL MLTPLT(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.2.OR.PLOTYP.EQ.8) THEN
CALL MLTBLT(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.3) THEN
CALL FANCYP(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.4) THEN
CALL FANCYB(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.5) THEN
CALL BLOTW(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.9) THEN
CALL PLOT49(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.10) THEN
CALL BARG49(R500(1),SIZE,1)
ELSE
CALL PLOTW(R500(1),SIZE,1)
ENDIF
CALL GRCLS
RETURN
*---------ENTRY LSTSLC(LIST,NUMBER)
ENTRY LSTSLS(LIST,NUMBER)
COUNT = 0
SIZE = 0
DO 120 I = 1,NUMBER
J = LIST(I)
J = MOD(J-1,80) + 1
IF (NPNTAG(J).GT.0) THEN
COUNT = COUNT + 1
LIST(COUNT) = J
SIZE = MAX(SIZE,NPNTAG(J))
ENDIF
120 CONTINUE
NUMBER = COUNT
I = INDST3(SIZE,2,COUNT)
COUNT = 0
DO 121 II = 1,NUMBER
J = LIST(II)
COUNT = COUNT + 1
IF (SIZE.LE.250) THEN
DO 122 I = 1,NPNTAG(J)
R500(INDEX3(I,1,COUNT)) = I
R500(INDEX3(I,2,COUNT)) = D250(I,J)
122
CONTINUE
DO 124 I = NPNTAG(J)+1,SIZE
R500(INDEX3(I,1,COUNT)) = NPNTAG(J)
R500(INDEX3(I,2,COUNT)) = 0.0

124

CONTINUE
ELSE

123

125

DO 123 I = 1,NPNTAG(J)
R500(INDEX3(I,1,COUNT))
R500(INDEX3(I,2,COUNT))
CONTINUE
DO 125 I = NPNTAG(J)+1,SIZE
R500(INDEX3(I,1,COUNT))
R500(INDEX3(I,2,COUNT))
CONTINUE

= I
= D500(I,J)
= NPNTAG(J)
= 0.0

ENDIF
121 CONTINUE
127 CONTINUE
PRINT *,'Doing ',COUNT,' slices of size ',SIZE
PRINT *,'What file (or device) for output? '
READ (*,'(A)') TMPFIL
IF (TMPFIL.EQ.' ') THEN
RETURN
ELSEIF (TMPFIL(1:1).EQ.'#') THEN
FILNAM = TMPFIL
ELSE
CALL FNCHCK(TMPFIL,'SLC',FILNAM)
ENDIF
CLOSE (UNIT=10,ERR=128)
128 OPEN (UNIT=10,FILE='#GR',ERR=129)
129 CLOSE (UNIT=10,ERR=130)
130 CONTINUE
IF (FILNAM(1:1).EQ.'#') THEN
OPEN (UNIT=10,FILE=FILNAM,FORM='FORMATTED',ERR=127)
IF (FILNAM(1:6).EQ.'#SCRN0') THEN
CALL GOTOXY(0,0)
CALL CLS
ENDIF
ELSE
OPEN (UNIT=10,FILE=FILNAM,STATUS='NEW',FORM='FORMATTED',ERR=127)
ENDIF
WRITE (10,'(''FRM'',80(1X,I6.6,1X:))',ERR=134) (FRAMTG(LIST(I)),I=1,COUNT)
134 WRITE (10,'(''TYP'',80(3X,I3.3,2X:))',ERR=135) (TYPTAG(LIST(I)),I=1,COUNT)
135 WRITE (10,'(''@ '',80(2X,I5.5,1X:))',ERR=136) (WHERTG(LIST(I)),I=1,COUNT)
*
WRITE (10,'(''# P'',80(1X,I6.6,1X:))',ERR=134) (NPNTAG(LIST(I)),I=1,COUNT)
136 CONTINUE
DO 126 II = 1,SIZE
WRITE (10,'(I3,80(:\1X,F7.0\))',ERR=131) II,(R500(INDEX3(II,2,J)),J=1,
COUNT)
131
CONTINUE
126 CONTINUE
IF (FILNAM(1:1).EQ.'#') THEN
CLOSE (UNIT=10,ERR=132)
ELSE
CLOSE (UNIT=10,STATUS='KEEP',ERR=132)
ENDIF
GOTO 133
132 CLOSE (UNIT=10,ERR=133)
133 CONTINUE
RETURN
*---------ENTRY PLTSCZ(FROM,TO)
DOZERO = .TRUE.
GOTO 144
ENTRY PLTSCA(FROM,TO)

DOZERO = .FALSE.
144 CONTINUE
FROM = MOD(FROM-1,80) + 1
TO = MOD(TO-1,80) + 1
IF (NPNTAG(FROM).LE.0) RETURN
IF (NPNTAG(TO).LE.0) RETURN
RHO1 = TYPTAG(FROM).GE.15 .AND. TYPTAG(FROM).LE.20
RHO2 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
SIZE = NPNTAG(FROM)
I = INDST3(SIZE,2,1)
K = 0
IF (SIZE.LE.250) THEN
DO 140 I = 1,SIZE
IF (DOZERO.OR.D250(I,FROM).NE.0.AND.D250(I,TO).NE.0) THEN
K = K + 1
R500(INDEX3(K,1,1)) = D250(I,FROM)
R500(INDEX3(K,2,1)) = D250(I,TO)
ENDIF
140
CONTINUE
ELSE
DO 141 I = 1,SIZE
IF (DOZERO.OR.D500(I,FROM).NE.0.AND.D500(I,TO).NE.0) THEN
K = K + 1
R500(INDEX3(K,1,1)) = D500(I,FROM)
R500(INDEX3(K,2,1)) = D500(I,TO)
ENDIF
141
CONTINUE
ENDIF
DO 142 I = K+1,SIZE
R500(INDEX3(I,1,1)) = R500(INDEX3(K,1,1))
R500(INDEX3(I,2,1)) = R500(INDEX3(K,2,1))
142 CONTINUE
CALL GRCLS
IF (PLOTYP.EQ.1.OR.PLOTYP.EQ.7.OR.PLOTYP.EQ.2.OR.PLOTYP.EQ.8) THEN
CALL MLADLT(R500(1),SIZE,1)
ELSEIF (PLOTYP.EQ.3.OR.PLOTYP.EQ.4) THEN
CALL DANWYI(R500(1),SIZE,1)
CALL DOWAIT
ELSEIF (PLOTYP.EQ.9) THEN
CALL DLAT49(R500(1),SIZE,1)
ELSE
CALL DLATW(R500(1),SIZE,1)
ENDIF
CALL GRCLS
RETURN
END
*---------------------------------------------------------------------SUBROUTINE XTR4CT(IT,LLX,LLY,FROM,TO)
CHARACTER*8 HEXOF,HAPS(32)
REAL*4 R500(16384)
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 RLOT1K(1024,2,8),RLT512(512,2,16),RLT256(256,2,32),TEMP
REAL*4 D170(170,120),D20480(20480)
INTEGER*4 LLX,LLY,FROM,TO,IAPS(32),LENS(32),I,J,NMBR,FROM2,THREE,FIVE
INTEGER*2 IT(LLX,LLY),TYPS(32),LENXS(32),LENYS(32),FNRNSN(32),TMP3(3)
INTEGER*2 TAGS(80,4),FRAMTG(80),TYPTAG(80),WHERTG(80),NPNTAG(80)
INTEGER*2 TMP5(5),I2MED,TMPN(256)

LOGICAL*1 RHO1,RHO2
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 (R500(1),RLOT1K(1,1,1),RLT512(1,1,1),RLT256(1,1,1))
EQUIVALENCE (TMPN(1),TMP3(1),TMP5(1),R500(1))
EQUIVALENCE (TAGS(1,1),FRAMTG(1)),(TAGS(1,2),TYPTAG(1)),(TAGS(1,3),WHERTG(
1))
EQUIVALENCE (TAGS(1,4),NPNTAG(1))
COMMON /OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNRNSN
COMMON /WFMOUT/DATA,/PARPLZ/R500,/WFMTAG/TAGS
SAVE /WFMOUT/,/PARPLZ/,/OMACNT/,/OMATYP/,/WFMTAG/
EXTERNAL I2MED
SAVE
DATA THREE/3/,FIVE/5/
TO = IABS(TO)
IF (FROM.LT.0.OR.FROM.GT.LLY) RETURN
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (LLX.EQ.500) THEN
TO = MOD(TO-1,40) + 1
IF (RHO1) THEN
DO 1 I = 1,LLX
D500(I,TO) = IT(I,FROM) - 8192
1
CONTINUE
ELSE
DO 5 I = 1,LLX
D500(I,TO) = IT(I,FROM)
5
CONTINUE
ENDIF
DO 4 I = LLX+1,500
D500(I,TO) = D500(LLX,TO)
4
CONTINUE
ELSE
TO = MOD(TO-1,80) + 1
IF (RHO1) THEN
DO 2 I = 1,LLX
D250(I,TO) = IT(I,FROM) - 8192
2
CONTINUE
ELSE
DO 6 I = 1,LLX
D250(I,TO) = IT(I,FROM)
6
CONTINUE
ENDIF
DO 3 I = LLX+1,250
D250(I,TO) = D250(LLX,TO)
3
CONTINUE
ENDIF
RETURN
*---------ENTRY YTR4CT(IT,LLX,LLY,FROM,TO)
IF (FROM.LT.0.OR.FROM.GT.LLX) RETURN
TO = IABS(TO)
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (LLX.EQ.500) THEN
TO = MOD(TO-1,40) + 1
IF (RHO1) THEN

DO 11 I = 1,LLY
D500(I,TO) = IT(FROM,I) - 8192
CONTINUE

11
ELSE

DO 15 I = 1,LLY
D500(I,TO) = IT(FROM,I)
CONTINUE
ENDIF
DO 14 I = LLY+1,500
D500(I,TO) = D500(TO,LLY)
CONTINUE

15

14
ELSE

TO = MOD(TO-1,80) + 1
IF (RHO1) THEN
DO 12 I = 1,LLY
D250(I,TO) = IT(FROM,I) - 8192
12
CONTINUE
ELSE
DO 16 I = 1,LLY
D250(I,TO) = IT(FROM,I)
16
CONTINUE
ENDIF
DO 13 I = LLY+1,250
D250(I,TO) = D250(TO,LLY)
13
CONTINUE
ENDIF
RETURN
*---------ENTRY XTR4MN(IT,LLX,LLY,FROM,FROM2,TO)
TO = IABS(TO)
IF (FROM.LT.0.OR.FROM.GT.LLY) RETURN
IF (FROM2.LT.0.OR.FROM2.GT.LLY) RETURN
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (FROM2.LT.FROM) THEN
I = FROM2
FROM2 = FROM
FROM = I
ENDIF
NMBR = FROM2 - FROM
IF (LLX.EQ.500) THEN
TO = MOD(TO-1,40) + 1
DO 21 I = 1,LLX
TEMP = 0.0
DO 25 J = FROM,FROM2
TEMP = TEMP + IT(I,J)
25
CONTINUE
D500(I,TO) = TEMP/NMBR
IF (RHO1) D500(I,TO) = D500(I,TO) - 8192
21
CONTINUE
DO 24 I = LLX+1,500
D500(I,TO) = D500(LLX,TO)
24
CONTINUE
ELSE
TO = MOD(TO-1,80) + 1
DO 22 I = 1,LLX
TEMP = 0.0
DO 26 J = FROM,FROM2
TEMP = TEMP + IT(I,J)
26
CONTINUE
D250(I,TO) = TEMP/NMBR

IF (RHO1) D250(I,TO) = D250(I,TO) - 8192


CONTINUE
DO 23 I = LLX+1,250
D250(I,TO) = D250(LLX,TO)
23
CONTINUE
ENDIF
RETURN
*---------ENTRY XTR3MD(IT,LLX,LLY,FROM,TO)
THREE = 3
TO = IABS(TO)
IF (FROM.LT.1.OR.FROM.GT.LLY-1) RETURN
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (LLX.GT.250) THEN
TO = MOD(TO-1,40) + 1
DO 31 I = 1,LLX
DO 35 J = 1,3
TMP3(J) = IT(I,FROM+J-2)
35
CONTINUE
D500(I,TO) = I2MED(TMP3(1),THREE)
IF (RHO1) D500(I,TO) = D500(I,TO) - 8192
31
CONTINUE
DO 34 I = LLX+1,500
D500(I,TO) = D500(LLX,TO)
34
CONTINUE
ELSE
TO = MOD(TO-1,80) + 1
DO 32 I = 1,LLX
DO 36 J = 1,3
TMP3(J) = IT(I,FROM+J-2)
36
CONTINUE
D250(I,TO) = I2MED(TMP3(1),THREE)
IF (RHO1) D250(I,TO) = D250(I,TO) - 8192
32
CONTINUE
DO 33 I = LLX+1,250
D250(I,TO) = D250(LLX,TO)
33
CONTINUE
ENDIF
RETURN
*---------ENTRY XTR5MD(IT,LLX,LLY,FROM,TO)
FIVE = 5
TO = IABS(TO)
IF (FROM.LT.2.OR.FROM.GT.LLY-2) RETURN
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (LLX.GT.250) THEN
TO = MOD(TO-1,40) + 1
DO 41 I = 1,LLX
DO 45 J = 1,5
TMP5(J) = IT(I,FROM+J-3)
45
CONTINUE
D500(I,TO) = I2MED(TMP5(1),FIVE)
IF (RHO1) D500(I,TO) = D500(I,TO) - 8192
41
CONTINUE
DO 44 I = LLX+1,500
D500(I,TO) = D500(LLX,TO)
44
CONTINUE
ELSE
TO = MOD(TO-1,80) + 1
DO 42 I = 1,LLX
22

DO 46 J = 1,5
TMP5(J) = IT(I,FROM+J-3)
46
CONTINUE
D250(I,TO) = I2MED(TMP5(1),FIVE)
IF (RHO1) D250(I,TO) = D250(I,TO) - 8192
42
CONTINUE
DO 43 I = LLX+1,250
D250(I,TO) = D250(LLX,TO)
43
CONTINUE
ENDIF
RETURN
*---------ENTRY XTRNMD(IT,LLX,LLY,FROM,FROM2,TO)
TO = IABS(TO)
IF (FROM.LT.1.OR.FROM.GT.LLY) RETURN
IF (FROM2.LT.1.OR.FROM2.GT.LLY) RETURN
RHO1 = TYPTAG(TO).GE.15 .AND. TYPTAG(TO).LE.20
IF (FROM.GT.FROM2) THEN
N = FROM
FROM = FROM2
FROM2 = N
ENDIF
N = FROM2 - FROM + 1
IF (LLX.GT.250) THEN
TO = MOD(TO-1,40) + 1
DO 91 I = 1,LLX
DO 95 J = FROM,FROM2
TMPN(J-FROM+1) = IT(I,J)
95
CONTINUE
D500(I,TO) = I2MED(TMPN(1),N)
IF (RHO1) D500(I,TO) = D500(I,TO) - 8192
91
CONTINUE
DO 94 I = LLX+1,500
D500(I,TO) = D500(LLX,TO)
94
CONTINUE
ELSE
TO = MOD(TO-1,80) + 1
DO 92 I = 1,LLX
DO 96 J = FROM,FROM2
TMPN(J-FROM+1) = IT(I,J)
96
CONTINUE
D250(I,TO) = I2MED(TMPN(1),N)
IF (RHO1) D250(I,TO) = D250(I,TO) - 8192
92
CONTINUE
DO 93 I = LLX+1,250
D250(I,TO) = D250(LLX,TO)
93
CONTINUE
ENDIF
RETURN
END
**---------------------------------------------------------------------* These routines are FORTRAN implementations of the assembly routine actually us
ed.
* The assembly counterparts are IIASIN and IIACOS, and are to be found in
* AFROP.ASM.
*$SEGMENT DATA_RED
*
SUBROUTINE IIFSIN(DSTREF,SRC,LEN)
*
INTEGER*4 LEN,KADDR,DSTREF,SRC,ASNTAB,SQRTAB,IL,ID,IS
*
COMMON /CNVTBL/ASNTAB,SQRTAB
*
SAVE /CNVTBL/

*
EXTERNAL CALL5,DDFS1N,DDFC0S
*
ID = DSTREF
*
IS = SRC
* 9000 CONTINUE
*
IL = KADDR(LEN)
*
CALL CALL5(DDFS1N,ID,IS,IL,ASNTAB,SQRTAB)
*
RETURN
*---------*
ENTRY DDFSIN(DSTREF,SRC,LEN)
*
ID = KADDR(DSTREF)
*
IS = KADDR(SRC)
*
GOTO 9000
*
ID = DSTREF
*
IS = SRC
* 9001 CONTINUE
*
IL = KADDR(LEN)
*
CALL CALL5(DDFC0S,ID,IS,IL,ASNTAB,SQRTAB)
*
RETURN
*---------*
ENTRY DDFCOS(DSTREF,SRC,LEN)
*
ID = KADDR(DSTREF)
*
IS = KADDR(SRC)
*
GOTO 9001
*
END
**---------------------------------------------------------------------*
SUBROUTINE DDFS1N(DSTREF,SRC,LEN,ASNTBL,SQRTBL)
*
INTEGER*4 LEN
*
INTEGER*2 DSTREF(LEN),SRC(LEN),ASNTBL(16384),SQRTBL(16384)
*
SAVE
*
DO 1 I = 1,LEN
*
J = DSTREF(I)
*
K = SRC(I)
*
IF (J.LT.0) THEN
*
L = 0
*
ELSEIF (J.GE.16382) THEN
*
L = -1
*
ELSE
*
L = ASNTBL(K)
*
IF (MOD(J,2).EQ.1) L = 8192 - L
*
J = J / 2
*
L = L + 8192*J
*
ENDIF
*
DSTREF(I) = L
*
1 CONTINUE
*
RETURN
*
END
**---------------------------------------------------------------------*
SUBROUTINE DDFC0S(DSTREF,SRC,LEN,ASNTBL,SQRTBL)
*
INTEGER*4 LEN
*
INTEGER*2 DSTREF(LEN),SRC(LEN),ASNTBL(16384),SQRTBL(16384)
*
SAVE
*
DO 1 I = 1,LEN
*
J = DSTREF(I)
*
K = SRC(I)
*
IF (J.LT.0) THEN
*
L = 0
*
ELSEIF (J.GE.16382) THEN
*
L = -1
*
ELSE
*
L = ASNTBL(K)

*
*
*
*
*
*
*
*

IF (MOD(J,2).EQ.0) L = 4096 - L
J = J / 2
L = L + 8192*J
ENDIF
DSTREF(I) = L
1 CONTINUE
RETURN
END

You might also like