Você está na página 1de 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, LABELS.FOR, STAMP.FOR, ETSTSUB.FOR, XTSTSUB.FOR, * * KTSTSUB.FOR, I2EPREP.FOR, MTSTSUB.FOR, FRAMOP.FOR, AFROP.ASM, TSTSUB.FOR and* * 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 CTSTSUB * *compiler is directed to place object code in segment CTSTSUB * *-----------------------------------------------------------------------------* $CHAREQU *compiler is directed NOT to barf on CHARACTER and numeric data types mixed in* *same COMMON BLOCK or EQUIVALENCE * ******************************************************************************* * LIST OF ENTRY POINTS: * * * *SEGMENT CTSTSUB * * INTEGER FUNCTION PACOMM(A128,IJKLI) * * PACOMM is the COMMon portion of the PAr data acquisition/test program command * interpreter, it gets called via others (PASCRL, PAKPDX, PACTLE, PACTLX, PACONT ). *=============================================================================* *SEGMENT FRAMOPS * * SUBROUTINE FROPS * * FROPS is the FRame OPerationS subroutine; FR0PS is an overflow routine from * * FROPS. FROPS displays the frame operations menu and accepts keyboard input * * specifying the operation. It calls FR0PS to accept keyboard input specifying * frame and other operands, and then performs the operation or calls other * * routines which implement the operations or sub-menu * *=============================================================================* *SEGMENT FRAM0PS * * INTEGER*4 FUNCTION FR0PS(NUMOPS,IWHOP,OPMESS,PARTL,ALTMOD,QGRUNT) * * FR0PS is overflow code from FROPS, the linker and languages systems impose a* * 32K limit on module size (to allow short references within the module) which* * is a severe, stupid pain in the rump. (Even the 8086/8088 family allows 64K* * modules!, here we have a 68000 with 16 Meg linear address space and a language * system which imposes 32K limits!!) ARRGH! * ******************************************************************************* *------------------------------------------------------------------INTEGER FUNCTION PACOMM(A128,IJKLI) CHARACTER*20 FRAME,FLNM,DFRAME CHARACTER*8 LOOPPT,LOOP2H,HAPS(32) CHARACTER PADS*3,NCRUDQ*1,FILNAM*24,FRMTYP(-2:20)*22,POLAR*2 CHARACTER*36 PSTATS(0:4),PSTAT(0:4) CHARACTER*1 C1,C2,TC,TCALGN(2)*1 REAL*4 CHGVLT,TLASER INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,LENS(32) INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3 INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,APS(0:7),LNS(0:7) INTEGER*4 TYPFRM,NFRAME,NDRIVE,HEADER,RUNNUM,SHOTNO

INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*2 INTEGER*2 INTEGER*2 INTEGER*2 N

IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM LENFR,LENTR,NTR,PICPAG,GRPHPG,GRPAGE,IAPS(32),CUMUL(0:16383) PACONT,IGNORE,SENBAS,SENDAT,INTOF PARARG,SPEC,X0 GETSR,A128(0:262144),ASC,SCAN,KBF1,KBF2,ERR,PROFIL(0:16383) TYPS(32),LENXS(32),LENYS(32),FNRNSN(32) IASC,ISCAN,IKBF1,IKBF2,IERR,I2,LAST4(4) TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0,ASCAN(7000),SCNQL

LOGICAL*4 AUTFRM,GTFM,DOSCAN LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY LOGICAL*4 SKIP1L,FILEXS,NOT14,KILLIT,NOISE,REPEAT LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,ISOU,LINESY,MAXO,MAX00 LOGICAL*2 BUFGUD(32),BUFUSE(32) LOGICAL*1 FLAG77(0:24),ISGONG,ISIT,CBLNRM,CBLINV 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 (PSTAT(0),PSTATS(0)),(CHNLS(0),CHLS(0)) EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC) COMMON /OMANOW/CHGVLT,TLASER,POLAR,/BEGS/C1,C2,/SPECI/SPEC,/OMADIT/DOSCAN COMMON /PARCUM/IGNORE,PROFIL,CUMUL,/PSTAMS/PSTAT,/TWOPAR/PICPAG,GRPHPG COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0 COMMON /OMASCN/SCNQLN,ASCAN,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT COMMON /PSYNCH/LINESY,/PARAFM/AUTFRM,/PARAUT/GTFM COMMON /PARDBG/LOOPPT,LOOP2H,LOOP,LOOP2,/PARLS4/LAST4 COMMON /BLKCNV/MAGNIF,LLHILO,CONTRS,BRIGHT,/PARMX/MAXO,MAX00 COMMON /IPPENC/SKIP1L,NOISE,/PARB14/NOT14,KILLIT COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR NSN COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3 COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NO READ,ONOFF, & DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY, IA128,SENBAS,SENDAT COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512,/STRBES/ISOU COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/PARCBL/CBLNRM,CBLINV COMMON /FILES/DFRAME,RUNNUM,SHOTNO,/FRAMNG/LENFR,LENTR,NTR COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP COMMON /OMABFL/BUFGUD,BUFUSE,/OMADSK/NDRIVE,NFRAME SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FILES/,/OMAPAR/,/OMAPR2/,/FRAMNG/,/STRBES/ SAVE /BLKCNV/,/PSTAMS/,/TWOPAR/,/GEWRTN/,/IPPENC/,/PARB14/,/PARZQX/,/PARLS 4/ SAVE /PARSCN/,/OMASCN/,/BEGS/,/SPECI/,/OMADIT/,/OMANOW/,/PARCUM/,/ZEROS/ SAVE /AMPLS/,/XFRAME/,/OMABFR/,/PARMX/,/OMACNT/,/OMATYP/,/PARCBL/ SAVE /OMABFL/,/OMADSK/ EXTERNAL GETSR,PACONT,REDISP SAVE

IJ = GETSR() SNOW = IJ.GE.$2000 1 CONTINUE IF (TC.EQ.':') THEN CALL CRCLS CALL REDISP GOTO 2 ELSEIF (TC.EQ.'"') THEN CALL FASTOR GOTO 2 ELSEIF (SCRL.AND.TC.EQ.'''') THEN CALL FASGET GOTO 2 ELSEIF (TC.EQ.'~') THEN CALL FROPS GOTO 2 ELSEIF (TC.EQ.'`') THEN CALL SLCOPS GOTO 2 ELSE II = PACONT(A128,IJKLI) IF (II.EQ.9999) GOTO 9999 IF (II.EQ.2) GOTO 2 IF (II.EQ.911) GOTO 911 ENDIF GOTO 1000 1011 CONTINUE IJKLI = IJKLI + 1 1000 CONTINUE PACOMM = 0 1001 CONTINUE ERR = -1 ASC = 0 SCAN = 0 RETURN 2 CONTINUE PACOMM = 2 NOISE = .TRUE. QWERTY = .TRUE. GOTO 1001 911 CONTINUE PACOMM = 911 RETURN 9999 CONTINUE PACOMM = 9999 RETURN 7898 FORMAT (I8,' BYTES REPORTED BY ASM SUBROUTINE.') 9878 FORMAT (BN,I8.0) END *---------------------------------------------------------------------$SEGMENT FRAMOPS SUBROUTINE FROPS CHARACTER*8 HEXOF,HEXARR(10),HAPS(32),FNAME*24,FNAME2*24 * CHARACTER*22 PADS*3,FRAME*20,FRMTYP(-2:20),ZVMESS,AVMESS CHARACTER*22 PADS*3,FRAME*20,FRMTYP(-2:20) CHARACTER*1 NCRUDQ,TC,TCALGN(2),OPMESS*36,GDUNGE*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 D170(170,120),D20480(20480),TINCR,CHGVLT INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,FCALL4,KADDR,IT,IWHOP2 INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,IFILL,JFILL,KF ILL INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*4 INTEGER*2 INTEGER*2 INTEGER*2 INTEGER*2 LOGICAL*4 DI LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,CONFRM LOGICAL*2 AUTMED,AUTMEN,ISTEST,CNVDBG,STRICT LOGICAL*1 PARTL,ALTMOD,QGRUNT,DIDIT,DISK,END,PARAM,FUBAR 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) EQUIVALENCE (DATA(1,1),D256L(1,1),D128L(1,1),D75L(1,1),D64L(1,1),D50L(1,1) APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,APSCR1,APSCR2,APSCR3 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,IAPS(32),KTEST3,IXL,IYL TYPFRM,NFRAME,NDRIVE,LENS(32),APS(0:7),LNS(0:7),IIIXS,IIIXE LENFR,LENTR,NTR,INTOF,MENUFM,IJS(3),IJ2S(3),IJ,IJ2,ICH IXNUM,IYNUM,IA128,SENDAT,SENBAS,BUF(3),IIIYS,IIIYE,CONVAR(0:7) CUMUL(0:16383),IGNORE,IGNOR,MODE,GETINT,IOFF,NRMVAL,PLOTYP FCALL3,FR0PS,PRPDUN,ERROR,RECLEN,FREC,LASTXX,CH45CK,I,J,MXV I1,I3 TYP(3),ICHS(3),IASC,ISCAN,IKBF1,IKBF2,IERR,I2,DEFBUF,B1,B2 ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32),LENYS(32),FNRNSN(32) LENXS(32),BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383) WFM0DX,WFM1DX,TENCPI,SXTNCP INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,ISOPEN,GTFM,CHKADR,CHKA

) 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)) COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,/I2EBUF/B1,B2 COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARAUT/GTFM COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP,/TRY2/STRICT COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMATYP/TYPS,LENXS,LENYS,FNRNSN COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512,/BUFDEF/DEFBUF 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,/SMOOTH/AUTMED,AUTMEN COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/CNFRM/CONFRM COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384 COMMON /PARCUM/IGNOR,PROFIL,CUMUL,/WFMOUT/DATA,/PARPLZ/R500 COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,CHGVLT,TINCR, &FREC,RECLEN,TENCPI,SXTNCP,/TST/ISTEST,/DEBUGC/CNVDBG,/BEGADR/LASTXX COMMON /KIASMN/ICHS,BUF,TYP,IJS,IJ2S SAVE /PARCUM/,/PARNML/,/PARNM2/,/BLKPRM/,/BUFDEF/,/SMOOTH/,/PARAUT/ SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPR2/,/FRAMLN/,/OMABFL/,/OMATYP/ SAVE /ZEROS/,/AMPLS/,/OMACNT/,/XFRAME/,/OMABFR/,/OMADSK/,/CNFRM/

SAVE /WFMOUT/,/PARPLZ/,/GARBAG/,/TST/,/DEBUGC/,/BEGADR/,/KIASMN/ SAVE /TRY2/,PLOTYP EXTERNAL HEXOF,MENUFM,KTEST3,ISQZ2T,FRAMES,CALL3,FCALL4,APORCP,KADDR EXTERNAL GETINT,FCALL3,XPLODE,XPL0DE,CALL4,CALL8,CALL5,XPLOD3,SCALOP EXTERNAL OMAZRO,PRPDUN,I2E,E2RHO,PRPCNV,FR0PS1,CHKADR,R3ALOC,CHKADI EXTERNAL PRPCVA,I2EALT,ERHOPL,ERH0PL,E2RH0 SAVE * DATA PLOTYP/7/ ZVMESS = 'ZERO BUFFER VALID? = ' AVMESS = 'MAX. BUFFER VALID? = ' HEXARR(1) = HEXOF(APS(0)) HEXARR(2) = HEXOF(IAPS(1)) IF (APS(0).NE.IAPS(1).OR.HAPS(1).NE.HEXARR(2).OR.HAPS(1).NE.HEXARR(1).OR. & (.NOT.CHKADR(APS(0))) .OR. (.NOT.CHKADR(IAPS(1))) ) THEN CALL GOTOXY(0,0) CALL GRCLS CALL GOTOXY(0,0) PRINT *,'FROPS: APS(0) <> IAPS(1)?' PRINT *,'CHKADR(APS(0)) is ',CHKADR(APS(0)) PRINT *,'CHKADR(IAPS(1)) is ',CHKADR(IAPS(1)) PRINT *,' IAPS(1) = $',HEXARR(2) PRINT *,' APS(0) = $',HEXARR(1) PRINT *,' HAPS(1) is $',HAPS(1) CALL WAIT(4.0) I = INTOF(HAPS(1)) IF (I.EQ.IAPS(1)) THEN APS(0) = IAPS(1) ELSEIF (I.EQ.APS(0)) THEN IAPS(1) = APS(0) ELSE CALL R3ALOC ENDIF ENDIF IA = APS(0) IF (DATACQ) IA = IA + 1024 IT = APS(0) * HAPS(1) = HEXOF(IAPS(1)) LEN = LENFR*2 N = NFRAME + 1 IDRIVE = NDRIVE 3552 CONTINUE IF ( .NOT.CHKADR(APS(0)) ) THEN CALL GRCLS CALL GOTOXY(0,0) PRINT *,'FROPS: CHKADR(APS(0)) FALSE.' CALL GOTOXY(40,0) PRINT *,' IAPS(1) = $',HEXARR(2) CALL GOTOXY(0,1) PRINT *,' APS(0) = $',HEXARR(1) CALL GOTOXY(40,1) PRINT *,' HAPS(1) is $',HAPS(1) CALL GOTOXY(0,2) PRINT *,' .NOT.CHKADR(APS(0)) ' CALL WAIT(2.0) IF (CHKADR(IAPS(1))) THEN APS(0) = IAPS(1) ELSE CALL R3ALOC ENDIF * *

ELSEIF ( .NOT.CHKADR(IAPS(1)) ) THEN CALL GRCLS CALL GOTOXY(0,0) PRINT *,'FROPS: CHKADR(IAPS(1)) FALSE.' CALL GOTOXY(40,0) PRINT *,' IAPS(1) = $',HEXARR(2) CALL GOTOXY(0,1) PRINT *,' APS(0) = $',HEXARR(1) CALL GOTOXY(40,1) PRINT *,' HAPS(1) is $',HAPS(1) CALL GOTOXY(0,2) PRINT *,' .NOT.CHKADR(IAPS(1)) ' CALL WAIT(2.0) IAPS(1) = APS(0) ENDIF * MXV = 46 DIDIT = .FALSE. IWHOP = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 1010 IF (IWHOP.GT.0) GOTO 3559 CALL FR0PS1(1) IWHOP = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 IF (IWHOP.GT.0) GOTO 3559 CALL FR0PS1(2) IWHOP = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 IF (IWHOP.GT.0) GOTO 3559 CALL FR0PS1(3) IWHOP = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 IF (IWHOP.GT.0) GOTO 3559 CALL FR0PS1(4) IWHOP = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 IF (IWHOP.GT.0) GOTO 3559 * CALL FR0PS1(5) * IWHOP = KTEST3(-1,0,MXV) * IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 * IF (IWHOP.GT.0) GOTO 3559 CONFRM = .TRUE. IWHOP = LMENU(4,0,MXV) ERR = -1 3559 CONTINUE DIDIT = .FALSE. PARTL = CAPS ALTMOD = NUML I = FR0PS(NUMOPS,IWHOP,OPMESS,PARTL,ALTMOD,QGRUNT) IF (I.EQ.2) THEN GOTO 2 ELSEIF (I.EQ.3552) THEN GOTO 3552 ELSEIF (I.EQ.3560) THEN GOTO 3560 ENDIF * IF (IWHOP.EQ.6.OR.INTRPT.OR.ESCAPE.OR.ABORT) THEN * GOTO 2 * ELSEIF (IWHOP.EQ.1) THEN * NUMOPS = 2

* OPMESS = ' COPY BUFFER TO BUFFER' * ELSEIF (IWHOP.EQ.2) THEN * NUMOPS = 1 * OPMESS = ' GET BUFFER FROM DISK ' * ELSEIF (IWHOP.EQ.3) THEN * NUMOPS = 1 * OPMESS = ' SAVE BUFFER TO DISK ' * ELSEIF (IWHOP.EQ.4) THEN * NUMOPS = 1 * OPMESS = ' DISPLAY BUFFER ' * ELSEIF (IWHOP.EQ.5) THEN * CALL BUFSTA * GOTO 3552 * ELSEIF (IWHOP.EQ.26) THEN * CALL CRCLS * PRINT *,'WHAT DRIVE? (0 .. 9, 10=DEFAULT DRIVE) ' * IDR = MENU(0,0,10) * IF (IDR.EQ.10) IDR = -1 * CALL XYGOTO(0,4) * PRINT *,'OUTPUT TO WHERE? (0=SCREEN, 1=print, 2=disk file)' * IUNIT = MENU(0,0,2) * IF (IUNIT.EQ.1) THEN * IUNIT = 7 * CALL PRTEST * ELSEIF (IUNIT.EQ.2) THEN * IUNIT = 10 * PRINT *,' What file? ' * READ (*,'(A)') FNAME * CALL FNCHCK(FNAME,'FIL',FNAME2) * OPEN (UNIT=10,FILE=FNAME2,STATUS='NEW',ERR=3449) * ENDIF * 3449 CONTINUE * INQUIRE (UNIT=IUNIT,OPENED=ISOPEN) * IF (.NOT.ISOPEN) THEN * PRINT *,' COULD NOT OPEN SPECIFIED OUTPUT DEVICE ' * PRINT *,' ' * IUNIT = 0 * ENDIF * CALL DIRDIR(IDR,'@???@###DAT',' ',IUNIT) * WRITE (11,*,ERR=3448) ' HIT ANY KEY TO CONTINUE ' * 3448 CONTINUE * CALL ISNTRP * IF (IERR.NE.0) GOTO 3448 * GOTO 3552 * ELSEIF (IWHOP.EQ.7) THEN * NUMOPS = 1 * OPMESS = ' DO ZERO CORRECTION OF BUFFER' * IF (.NOT.ZVALID) THEN * PRINT *,' Zero buffer data may be invalid, PROCEED? (y/N) ' * IFOO = MENU(0,0,1) * IF (IFOO.EQ.0) GOTO 3552 * ENDIF * ERR = -1 * ASC = 0 * SCAN = 0 * ELSEIF (IWHOP.EQ.8) THEN * NUMOPS = 1 * OPMESS = ' DO NORMALIZATION OF BUFFER' * IF (.NOT.AVALID) THEN * PRINT *,' Max. buffer data may be invalid, PROCEED? (y/N) '

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

IFOO = MENU(0,0,1) IF (IFOO.EQ.0) GOTO 3552 ENDIF ERR = -1 ASC = 0 SCAN = 0 ELSEIF (IWHOP.EQ.9) THEN NUMOPS = 2 OPMESS = ' Sum of two buffers into first buffer' ELSEIF (IWHOP.EQ.10) THEN NUMOPS = 2 OPMESS = ' Difference of two buffers into first' ELSEIF (IWHOP.EQ.11) THEN NUMOPS = 2 IF (ALTMOD) THEN OPMESS = ' Merge MINIMA of both buffers into first' ELSE OPMESS = ' Merge MAXIMA of both buffers into first' ENDIF ELSEIF (IWHOP.EQ.12) THEN NUMOPS = 2 OPMESS = ' Ratio of two buffers into first buffer' ELSEIF (IWHOP.EQ.13) THEN NUMOPS = 1 OPMESS = ' Fill buffer with a specified input ' ELSEIF (IWHOP.EQ.14) THEN NUMOPS = 1 OPMESS = ' Mul/Div buffer ' ELSEIF (IWHOP.EQ.15) THEN NUMOPS = 1 OPMESS = ' LSL buffer ' ELSEIF (IWHOP.EQ.16) THEN NUMOPS = 1 OPMESS = ' LSR buffer ' ELSEIF (IWHOP.EQ.17) THEN NUMOPS = 1 OPMESS = ' CONDITIONAL REPLACEMENTS' ELSEIF (IWHOP.EQ.18) THEN NUMOPS = 1 OPMESS = ' PARAMETER OVERRIDES' ELSEIF (IWHOP.EQ.19) THEN NUMOPS = 2 OPMESS = ' SWAP BUFFERS ' ELSEIF (IWHOP.EQ.20) THEN NUMOPS = 1 OPMESS = ' BI-CONDITIONAL REPLACEMENTS' ELSEIF (IWHOP.EQ.21) THEN NUMOPS = 2 OPMESS = ' MASKING BUFFER ' ELSEIF (IWHOP.EQ.22) THEN NUMOPS = 1 OPMESS = ' SHUFFLE BUFFER' ELSEIF (IWHOP.EQ.23) THEN NUMOPS = 1 OPMESS = ' CROP BUFFER' ELSEIF (IWHOP.EQ.24) THEN NUMOPS = 1 OPMESS = ' Scalar operations' ELSEIF (IWHOP.EQ.25) THEN NUMOPS = 1

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

QGRUNT = PARTL IF (QGRUNT.AND.ALTMOD) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 5' ELSEIF (QGRUNT) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 3' ELSEIF (ALTMOD) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 2' ELSE OPMESS = ' SQUEEZE BUFFER HORIZONTALLY ' ENDIF ELSEIF (IWHOP.EQ.27.OR.IWHOP.EQ.29) THEN NUMOPS = 1 OPMESS = ' MEDIAN SMOOTH BUFFER' ELSEIF (IWHOP.EQ.28.OR.IWHOP.EQ.30) THEN NUMOPS = 1 OPMESS = ' MEAN SMOOTH BUFFER' ELSEIF (IWHOP.EQ.31.OR.IWHOP.EQ.32) THEN NUMOPS = 1 IF (IWHOP.EQ.31) THEN OPMESS = ' FSREAD - Frame Synchronous READ from OMA' ELSE OPMESS = ' FXREAD - LASER & Frame Synchronous READ from OMA' ENDIF ICH = 1 OPNUM = 1 PARTL = .FALSE. GOTO 3560 ELSEIF (IWHOP.EQ.33) THEN NUMOPS = 2 OPMESS = ' ARRAY operations' ELSEIF (IWHOP.EQ.34.OR.IWHOP.EQ.35) THEN NUMOPS = 1 OPMESS = ' CONVOLVE BUFFER' ELSEIF (IWHOP.EQ.36) THEN NUMOPS = 2 OPMESS = ' Single Quadrant E-CONVERSION; buffer to buffer' ELSEIF (IWHOP.EQ.37) THEN NUMOPS = 1 OPMESS = ' TRIM EDGES ' ELSEIF (IWHOP.EQ.38) THEN NUMOPS = 1 OPMESS = ' LINEAR RESCALE' ELSEIF (IWHOP.EQ.39) THEN CALL WFMOPS GOTO 3552 ELSEIF (IWHOP.EQ.40) THEN CALL SLCOPS GOTO 3552 ELSEIF (IWHOP.EQ.41) THEN NUMOPS = 2 OPMESS = '''EXPLODE'' FRAME AS MULTIPLOT' QGRUNT = PARTL ELSEIF (IWHOP.EQ.42) THEN NUMOPS = 2 OPMESS = 'rho-CONVERSION; buffer to buffer' ELSEIF (IWHOP.EQ.43) THEN NUMOPS = 1 OPMESS = 'ASCII Frame save' ELSEIF (IWHOP.EQ.44) THEN NUMOPS = 2

* * * * * * * *

OPMESS = 'E-CONVERSION; buffer to buffer' ELSEIF (IWHOP.EQ.45) THEN NUMOPS = 1 OPMESS = 'Image FLIPS ' ELSEIF (IWHOP.EQ.46) THEN NUMOPS = 2 OPMESS = 'E - Rho Plots ' ENDIF OPNUM = 1 * QGRUNT = PARTL .AND. (IWHOP.EQ.41.OR.IWHOP.EQ.25) PARTL = PARTL .AND. (IWHOP.GT.8.AND.IWHOP.NE.18.AND.IWHOP.NE.19 & .AND.IWHOP.NE.23.AND.IWHOP.NE.25.AND.IWHOP.NE.26 & .AND.IWHOP.NE.31.AND.IWHOP.NE.32.AND.IWHOP.NE.46 & .AND.(.NOT.QGRUNT)) IFOO17 = 0 3553 CONTINUE ISIZE = LENFR IF (OPNUM.EQ.1) CALL CLS CALL CLLINE(1,12) CALL GOTOXY(0,0) PRINT *,' ' PRINT *,' FRAME OPERATIONS: ',OPMESS ICH = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 1010 IF (ICH.GT.0) GOTO 3560 IF (NUMOPS.GT.1.AND.OPNUM.GT.1) THEN CALL CLLINE(2,12) CALL GOTOXY(0,2) PRINT *,' CHOOSING OPERAND NUMBER: ',OPNUM ELSE IF (NUMOPS.GT.1) THEN CALL CLLINE(2,12) CALL GOTOXY(0,2) PRINT *,' CHOOSING OPERAND NUMBER: ',OPNUM ELSE CALL CLLINE(2,12) ENDIF ENDIF ICH = KTEST3(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 1010 IF (ICH.GT.0) GOTO 3560 * ICH = MENUFM() ICH = MENUFR(ISIZE) ERR = -1 3560 CONTINUE IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN GOTO 3552 ELSEIF (ICH.EQ.6) THEN OPNUM = OPNUM - 1 IF (OPNUM.LE.0) GOTO 3552 GOTO 3553 ENDIF IT = IAPS(ICH) BUF(OPNUM) = IT IF (IWHOP.NE.18.AND..NOT.CHKADR(IT)) THEN PRINT *,'? ERROR - that buffer has an invalid start address?!?!' IFOO17 = IFOO17 + 1 IF (IFOO17.LT.3) GOTO 3553 IF (IFOO17.GT.4) GOTO 3552 CALL R3ALOC

OPNUM = 1 GOTO 3553 ENDIF TYP(OPNUM) = TYPFRM ICHS(OPNUM) = ICH IXL = LENXS(ICH) IYL = LENYS(ICH) IJ = IXL*IYL IJ2 = IJ*2 IJS(OPNUM) = IJ IJ2S(OPNUM) = IJ2 IF (OPNUM.EQ.1) THEN DEFBUF = ICH ARRADR = IT ISIZE = IXL*IYL ENDIF IF (OPNUM.LT.NUMOPS) THEN OPNUM = OPNUM + 1 GOTO 3553 ENDIF ICH = ICHS(1) B1 = ICHS(1) B2 = ICHS(2) IF (IWHOP.EQ.9.OR.IWHOP.EQ.10.OR.IWHOP.EQ.11.OR. & IWHOP.EQ.12.OR.IWHOP.EQ.21.OR.IWHOP.EQ.33.OR.IWHOP.EQ.46) THEN IF ((LENXS(ICHS(1)).NE.LENXS(ICHS(2))).OR.(LENYS(ICHS(1)).NE.LENYS(ICH S(2)))) THEN WRITE (11,'(A)') ' BUFFERS MUST HAVE SAME ASPECT RATIO, THESE DIFF ER ' WRITE (11,'(A)') ' CHOOSE NEW SECOND BUFFER ' CALL WAITQ(0.85) OPNUM = 2 GOTO 3553 ENDIF ENDIF IF (IWHOP.EQ.1.OR.(IWHOP.GE.9.AND.IWHOP.LE.12).OR.IWHOP.EQ.33.OR.IWHOP.EQ. 46.OR. & IWHOP.EQ.19.OR.IWHOP.EQ.21.OR.IWHOP.EQ.36.OR.IWHOP.EQ.44.OR.IWHOP.EQ.4 2) THEN IF (BUF(1).EQ.BUF(2)) THEN WRITE (11,'(A)') 'BUFFERS MUST NOT BE THE SAME! ' WRITE (11,'(A)') ' CHOOSE NEW SECOND BUFFER ' CALL WAITQ(0.85) OPNUM = 2 GOTO 3553 ENDIF ENDIF IF ( ( (BUF(2).EQ.4.AND.ZVALID).OR.(BUF(2).EQ.5.AND.AVALID) ) .AND. & ( IWHOP.EQ.36.OR.IWHOP.EQ.44.OR.IWHOP.EQ.42.OR.IWHOP.EQ.21 ) & ) THEN WRITE (11,'(A)') 'THAT BUFFER MUST NOT BE SMASHED! ' WRITE (11,'(A)') ' CHOOSE NEW DESTINATION (SECOND BUFFER)' CALL WAITQ(0.85) OPNUM = 2 GOTO 3553 ELSEIF ( ( ( (BUF(1).EQ.4.AND.ZVALID).OR.(BUF(1).EQ.5.AND.AVALID) ) .AND. & IWHOP.EQ.8 ) .OR. ( (BUF(2).EQ.4.AND.ZVALID).AND.(IWHOP.EQ.7) ) & ) THEN WRITE (11,'(A)') 'THAT BUFFER MUST NOT BE SMASHED! ' WRITE (11,'(A)') ' CHOOSE NEW DESTINATION (SECOND BUFFER)'

CALL WAITQ(0.85) OPNUM = 1 GOTO 3553 ENDIF IF (PARTL) THEN CALL CRCLS 3845 PRINT *,' STARTING AT ROW ? (1 for first row)' READ (*,*,ERR=3845) LINEST IF (LINEST.LT.1.OR.LINEST.GT.IYL) LINEST = 1 3846 PRINT *,' ENDING WITH ROW ?' READ (*,*,ERR=3846) LINEND IF (LINEND.GT.IYL) LINEND = IYL IF (LINEND.LT.1) LINEND = IYL - MOD(LINEND,IYL) IF (LINEND.LT.LINEST) LINEND = IYL PARTL = .NOT. (LINEST.EQ.1.AND.LINEND.EQ.IYL) ENDIF IF (PARTL) THEN IT = BUF(1) + (LINEST-1)*IXL*2 BUF(1) = IT IYL = LINEND - LINEST + 1 IJ = IXL*IYL IJ2 = IJ*2 IJS(1) = IJ IJ2S(1) = IJ2 IF (OPNUM.EQ.2) THEN BUF(2) = BUF(2) + (LINEST-1)*IXL*2 IJS(2) = IJ IJ2S(2) = IJ2 ENDIF ENDIF * CALL CLLINE(19,12) * CALL CLLINE(20,12) * CALL CLLINE(21,12) * CALL CLLINE(22,12) * CALL CLLINE(23,12) * CALL GOTOXY(0,20) 9444 CONTINUE CALL FR0PS2 IF (IWHOP.EQ.1) THEN * OPMESS = ' COPY BUFFER TO BUFFER' IJ2 = IJ2S(1) PRINT *,' COPY ',IJ2,' BYTES FROM $',HAPS(ICHS(1)),' TO $',HAPS(ICHS(2 )) CALL IICOPY(BUF(1),BUF(2),IJ2) TYPS(ICHS(2)) = TYPS(ICHS(1)) LENXS(ICHS(2)) = LENXS(ICHS(1)) LENYS(ICHS(2)) = LENYS(ICHS(1)) FNRNSN(ICHS(2)) = FNRNSN(ICHS(1)) WRITE (11,'(A)') ' COPY DONE ... ' ICH = ICHS(2) I = CH45CK(ICH) * IF (ICH.EQ.4) THEN * ZVALID = TYPS(ICH).EQ.-1 .OR. TYPS(ICH).EQ.0 * PRINT *,ZVMESS,ZVALID * ELSEIF (ICH.EQ.5) THEN * AVALID = TYPS(ICH).EQ.5 .OR. TYPS(ICH).EQ.7 * PRINT *,AVMESS,AVALID * ENDIF ELSEIF (IWHOP.EQ.2) THEN * OPMESS = ' GET BUFFER FROM DISK '

5314 5316

CALL CLLINE(0,12) CALL GOTOXY(0,0) PRINT *,'Getting buffer #',ICH,' @ $',HAPS(ICHS(1)) CALL FASG3T(ICH) IF (ALTMOD.AND.NFRAME.EQ.FNRNSN(ICH)) THEN CALL XYGOTO(0,4) N = NFRAME IDR = NDRIVE ITYPA = TYPS(ICH) LX = LENXS(ICH) LY = LENYS(ICH) LENCH = LX*LY*2 CONTINUE N = N + 1 CONTINUE ICH = ICH + 1 IF (ICH.GT.32) GOTO 3552 IF (.NOT.BUFGUD(ICH)) GOTO 5316 IF (LENS(ICH).LT.LENCH) GOTO 5316 IF (ICH.EQ.5.AND.AVALID) THEN PRINT *,'MAX buffer (5) is target, replace current contents? ( I = MENU(0,0,1) IF (I.EQ.0) GOTO 5316 ELSEIF (ICH.EQ.4.AND.ZVALID) THEN PRINT *,'ZRC buffer (4) is target, replace current contents? (

y/N)'

y/N)' I = MENU(0,0,1) IF (I.EQ.0) GOTO 5316 ENDIF CALL FBSG3T(ICH,N,IDR) IF (FNRNSN(ICH).NE.N) THEN PRINT *,'ERROR WHILE ATTEMPTING TO READ FRAME ',N IF (N.NE.-1) THEN PRINT *,' FROM DRIVE ',IDR,' TO BUFFER ',ICH ELSE PRINT *,' FROM DEFAULT DRIVE TO BUFFER ',ICH ENDIF ELSE PRINT *,'FRAME ',N,' now in buffer ',ICH IF (ICH.EQ.4.AND.ZVALID) ZVALID = .FALSE. IF (ICH.EQ.5.AND.AVALID) AVALID = .FALSE. GOTO 5314 ENDIF ELSEIF (FNRNSN(ICH).EQ.NFRAME.AND..NOT.INTRPT) THEN I = CH45CK(ICH) IF (ICH.EQ.4.AND..NOT.INTRPT) THEN ZVALID = TYPS(ICH).EQ.-1 .OR. TYPS(ICH).EQ.0 PRINT *,ZVMESS,ZVALID ELSEIF (ICH.EQ.5.AND..NOT.INTRPT) THEN AVALID = TYPS(ICH).EQ.5 .OR. TYPS(ICH).EQ.7 PRINT *,AVMESS,AVALID ENDIF ENDIF ELSEIF (IWHOP.EQ.3) THEN OPMESS = ' SAVE BUFFER TO DISK ' CALL CLLINE(0,12) CALL GOTOXY(0,0) PRINT *,'Storing buffer #',ICH,' @ $',HAPS(ICHS(1)) CALL FAST0R(ICH)

* * * * * * * *

IF (ALTMOD) THEN CALL XYGOTO(0,4) N = NFRAME IDR = NDRIVE ITYPA = TYPS(ICH) LX = LENXS(ICH) LY = LENYS(ICH) LENCH = LX*LY*2 5315 CONTINUE N = N + 1 5317 CONTINUE ICH = ICH + 1 IF (ICH.GT.32) GOTO 3552 IF (ITYPA.NE.TYPS(ICH).OR..NOT.BUFGUD(ICH)) GOTO 5317 IF (LX.NE.LENXS(ICH).OR.LY.NE.LENYS(ICH)) GOTO 5317 CALL FBST0R(ICH,N,IDR) IF (NFRAME.NE.N) THEN PRINT *,'ERROR WHILE ATTEMPTING TO STORE BUFFER ',ICH ELSE PRINT *,'BUFFER ',ICH,' STORED AS FRAME ',N GOTO 5315 ENDIF ENDIF ELSEIF (IWHOP.EQ.4) THEN * OPMESS = ' DISPLAY BUFFER ' MAGNIF = 17 IF (TYPS(ICH).NE.-2) TYPFRM = TYPS(ICH) CALL RED1SP(ICH) IF (SCAN.EQ.$C0.OR.SCAN.EQ.$87.OR.SCAN.EQ.$88) THEN IWHOP = 32 GOTO 3559 ELSEIF (SCAN.EQ.$AD.OR.SCAN.EQ.$AE) THEN IWHOP = 31 GOTO 3559 ENDIF IF (ERR.NE.0) THEN ICH = KTEST(-1,0,MXV) IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 1010 OPNUM = 1 IF (ICH.GT.0) GOTO 3560 ENDIF ELSEIF (IWHOP.EQ.7) THEN * OPMESS = ' DO ZERO CORRECTION OF BUFFER' IF (ICHS(1).EQ.4) THEN WRITE (11,'(A)') ' ZERO CORRECTION OF ZERO FRAME BUFFER IS DISALLO WED' WRITE (11,'(A)') ' CHOOSE NEW BUFFER ' CALL WAITQ(0.85) OPNUM = 1 GOTO 3553 ENDIF PRINT *,'Zero correcting buffer ',ICH,' @ $',HAPS(ICHS(1)) IJ = IJS(1) CALL OMAZRO(ICH,4,IJ) WRITE (11,'(A)') ' ZERO CORR. DONE ...' ELSEIF (IWHOP.EQ.8) THEN * OPMESS = ' DO NORMALIZATION OF BUFFER' IF (ICHS(1).EQ.4) THEN WRITE (11,'(A)') ' NORMALIZATION OF ZERO FRAME BUFFER IS DISALLOWE D'

IF (ALTMOD) THEN WRITE (11,'(A)') 'Continue anyway? (y/N)' I = MENU(0,0,1) ELSE WRITE (11,'(A)') ' CHOOSE NEW BUFFER ' CALL WAITQ(0.85) I = 0 ENDIF IF (I.EQ.0) THEN OPNUM = 1 GOTO 3553 ENDIF ELSEIF (ICHS(1).EQ.5) THEN WRITE (11,'(A)') ' NORMALIZATION OF MAX. FRAME BUFFER IS DISALLOWE D' WRITE (11,'(A)') ' CHOOSE NEW BUFFER ' CALL WAITQ(0.85) OPNUM = 1 GOTO 3553 ENDIF IJ = IJS(1) PRINT *,'Normalizing buffer #',ICH,' @ $',HAPS(ICHS(1)) CALL OMAMAX(ICH,5,IJ) WRITE (11,'(A)') 'NORMALIZED ...' ELSEIF (IWHOP.EQ.9) THEN OPMESS = ' Sum of two buffers into first buffer' IJ = IJS(1) PRINT *,' SUMMING ',IJ,' BYTES INTO $',HAPS(ICHS(1)),' FROM $',HAPS(IC CALL IIADD2(BUF(1),BUF(2),IJ) IFO = TYPS(ICHS(1)) IBR = TYPS(ICHS(2)) IF (PARTL.OR.IFO.EQ.-1.OR.IBR.EQ.-1) THEN IF (IFO.EQ.1.OR.IBR.EQ.1) THEN TYPS(ICHS(1)) = 0 ELSEIF (IFO.EQ.7.OR.IBR.EQ.7) THEN TYPS(ICHS(1)) = 5 ENDIF ELSE TYPS(ICHS(1)) = 6 ENDIF FNRNSN(ICHS(1)) = 0 WRITE (11,'(A)') ' SUMMATION DONE ... ' ELSEIF (IWHOP.EQ.10) THEN OPMESS = ' Difference of two buffers into first' IJ = IJS(1) PRINT *,' SUBTRACTING FROM $',HAPS(ICHS(1)),' USING $',HAPS(ICHS(2)) I = ICHS(1) J = ICHS(2) CALL OMAZRO(I,J,IJ) CALL IISZB2(BUF(1),BUF(2),IJ) IBR = TYPS(ICHS(2)) IF (PARTL.OR..NOT.(IBR.EQ.0.OR.IBR.EQ.-1)) THEN TYPS(ICHS(1)) = 6 ELSEIF (TYPS(ICHS(1)).EQ.0) THEN TYPS(ICHS(1)) = 1 ELSEIF (TYPS(ICHS(1)).EQ.5) THEN TYPS(ICHS(1)) = 7 ELSE TYPS(ICHS(1)) = 6

* HS(2))

* * * * * * * * * *

* (2))

ENDIF FNRNSN(ICHS(1)) = 0 WRITE (11,'(A)') ' SUBTRACTION DONE ...' ELSEIF (IWHOP.EQ.11) THEN OPMESS = ' Merge maxima of both buffers into first' IJ = IJS(1) PRINT *,' MERGE ',IJ,' BYTES INTO $',HAPS(ICHS(1)),' FROM $',HAPS(ICHS IF (ALTMOD) THEN CALL IIMJ2L(BUF(1),BUF(2),IJ) ELSE CALL IIMJ2G(BUF(1),BUF(2),IJ) ENDIF FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) IFO = TYPS(ICHS(1)) IBR = TYPS(ICHS(2)) IF (IFO.NE.IBR) THEN IF (IFO.EQ.1) THEN IF (IBR.EQ.7) THEN TYPS(ICH) = 7 ELSE TYPS(ICH) = 6 ENDIF ELSEIF (IFO.EQ.0) THEN IF (IBR.EQ.-1) THEN TYPS(ICH) = -1 ELSEIF (IBR.EQ.5) THEN TYPS(ICH) = 5 ELSE TYPS(ICH) = 6 ENDIF ELSE TYPS(ICH) = 6 ENDIF ENDIF WRITE (11,'(A)') ' MERGED ... ' ELSEIF (IWHOP.EQ.12) THEN IJ = IJS(1) PRINT *,' DIVIDING ',IJ,' BYTES IN $',HAPS(ICHS(1)),' BY $',HAPS(ICHS(

2)) IF (ALTMOD) THEN CALL IID0VD(BUF(1),BUF(2),IJ) ELSE CALL IIDOVD(BUF(1),BUF(2),IJ) ENDIF WRITE (11,'(A)') ' DIVISION DONE ...' IF (TYPS(ICHS(1)).NE.6.AND.TYPS(ICHS(2)).NE.6.AND.(.NOT.PARTL)) THEN I1I = TYPS(ICHS(1)) I2I = TYPS(ICHS(2)) IF (I1I.EQ.1.OR.I1I.EQ.7) THEN IF (I2I.EQ.7.OR.I2I.EQ.1) THEN TYPS(ICHS(1)) = 8 ELSEIF (I2I.EQ.5.OR.I2I.EQ.0) THEN TYPS(ICHS(1)) = 4 ELSE TYPS(ICHS(1)) = 6 ENDIF ELSEIF (I1I.EQ.0.OR.I1I.EQ.5) THEN IF (I2I.EQ.5.OR.I2I.EQ.0) THEN TYPS(ICHS(1)) = 3

ELSE TYPS(ICHS(1)) = 6 ENDIF ELSE TYPS(ICHS(1)) = 6 ENDIF ELSE TYPS(ICHS(1)) = 6 ENDIF FNRNSN(ICHS(1)) = 0 ELSEIF (IWHOP.EQ.13) THEN * OPMESS = ' Fill buffer with a specified input ' PRINT *,' Special(0) or NORMAL(1)?' ITF = MENU(1,0,1) 3561 CONTINUE PRINT *,' WHAT VALUE TO FILL WITH? (0 .. $FFFF)' * READ (*,'(A)',ERR=3561) HEXARR(1) * HEXARR(2) = '$'//HEXARR(1) * IFILL = INTOF(HEXARR(2)) READ (*,'(A)',ERR=3561) GDUNGE(2:32) GDUNGE(1:1) = '$' IFILL = INTOF(GDUNGE) IF (ITF.EQ.1) THEN JFILL = IAND(IFILL,$0FFFF) KFILL = JFILL * 65536 IFILL = JFILL + KFILL ENDIF IJ2 = IJ2S(1) HEXARR(1) = HEXOF(IFILL) * IFILL = JFILL + KFILL CALL GOTOXY(20,0) PRINT *,' FILLING BUFFER #',ICH,' @ $',HAPS(ICH),' with $',HEXARR(1) CALL IHITIT(IT,IJ2,IFILL) WRITE (11,'(A)') ' FILLING DONE ... ' IF (IFILL.EQ.0) THEN TYPS(ICH) = -2 ELSE TYPS(ICH) = 6 ENDIF FNRNSN(ICHS(1)) = 0 ELSEIF (IWHOP.EQ.14) THEN * OPMESS = ' Mul/Div buffer ' IJ = IJS(1) 3002 PRINT *,' Multiplier? ' READ (*,'(A)',ERR=3002) GDUNGE IMULT = INTOF(GDUNGE) IF (IMULT.GT.0) THEN 3003 PRINT *,' Divisor? ' READ (*,'(A)',ERR=3003) GDUNGE IDIVIS = INTOF(GDUNGE) IF (IDIVIS.GT.0) THEN PRINT *,' MulDiving BUFFER #',ICH,' @ $',HAPS(ICH),' x',IMULT, '/',IDIVIS CALL IMLDV(IT,IJ,IMULT,IDIVIS) WRITE (11,'(A)') ' MulDiving DONE ... ' ENDIF ENDIF FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) ELSEIF (IWHOP.EQ.15) THEN * OPMESS = ' LSL buffer '

IF (ALTMOD) THEN PRINT *,' How many bits to ROTATE LEFT? (0 .. 15)' ELSE PRINT *,' How many bits to shift LEFT? (0 .. 15)' ENDIF IFILL = MENU(0,0,15) IJ = IJS(1) IF (IFILL.NE.0) THEN IF (ALTMOD) THEN PRINT *,' ROLing BUFFER #',ICH,' @ $',HAPS(ICH),' by ',IFILL,' bit s' CALL IROL2(IT,IJ,IFILL) ELSE PRINT *,' SHIFTING BUFFER #',ICH,' @ $',HAPS(ICH),' by ',IFILL,' b its' CALL ILSL2(IT,IJ,IFILL) ENDIF WRITE (11,'(A)') ' SHIFTING DONE ... ' ENDIF FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) ELSEIF (IWHOP.EQ.16) THEN OPMESS = ' LSR buffer ' IF (ALTMOD) THEN PRINT *,' How many bits to ROTATE RIGHT? (0 .. 15)' ELSE PRINT *,' How many bits to shift RIGHT? (0 .. 15)' ENDIF IFILL = MENU(0,0,15) IJ = IJS(1) IF (IFILL.NE.0) THEN IF (ALTMOD) THEN PRINT *,' RORing BUFFER #',ICH,' @ $',HAPS(ICH),' by ',IFILL,' bit CALL IROR2(IT,IJ,IFILL) ELSE PRINT *,' SHIFTING BUFFER #',ICH,' @ $',HAPS(ICH),' by ',IFILL,' b its' CALL ILSR2(IT,IJ,IFILL) ENDIF WRITE (11,'(A)') ' SHIFTING DONE ... ' ENDIF FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) ELSEIF (IWHOP.EQ.17) THEN OPMESS = ' CONDITIONAL REPLACEMENTS' ISW = IAPS(ICH) ISY = LENYS(ICH) IAPS(ICH) = IT LENYS(ICH) = IYL CALL CND81T(ICH) IAPS(ICH) = ISW LENYS(ICH) = ISY WRITE (11,*) 'Conditional replacement DONE ...' FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) ELSEIF (IWHOP.EQ.18) THEN IF (IAPS(ICH).EQ.0.OR.NUML.OR.ALTMOD.OR.(.NOT.CHKADR(IAPS(ICH)))) THEN PRINT *,'BUFFER ADDRESS? (0 to abort)' I = GETINT() IF (I.LE.$0E000) THEN IWHOP = 0 GOTO 1010

s'

* 3010 * * * * 3011 * * * * 3012 ?'

ENDIF IAPS(ICH) = I PRINT *,'BUFFER LENGTH? ' I = GETINT() IF (I.LE.0) I = 65536 IF (I.GT.786432) I = 786432 LENS(ICH) = I BUFGUD(ICH) = .TRUE. BUFUSE(ICH) = LENS(ICH).GE.(LENXS(1)*LENYS(1)*2) I = IAPS(ICH) HAPS(ICH) = HEXOF(I) ENDIF OPMESS = ' PARAMETER OVERRIDES' PRINT *,' Buffer X Width = ',LENXS(ICH),' NEW VALUE? (0=NO CHANGE)' READ (*,'(BN,I8)',ERR=3010) NX IF (NX.GT.0) LENXS(ICH) = NX CALL CLLINE(19,12) CALL CLLINE(20,12) CALL CLLINE(21,12) CALL GOTOXY(0,20) CALL FR0PS2 PRINT *,' Buffer Y Height = ',LENYS(ICH),' NEW VALUE? (0=NO CHANGE)' READ (*,'(BN,I8)',ERR=3011) NY IF (NY.GT.0) LENYS(ICH) = NY CALL CLLINE(19,12) CALL CLLINE(20,12) CALL CLLINE(21,12) CALL GOTOXY(0,20) CALL FR0PS2 PRINT *,'BUFFER TYPE = ',TYPS(ICH),' --> ',FRMTYP(TYPS(ICH)),' NEW VAL PRINT *,' (21=NO CHANGE, 22=LIST)' II = MENU(0,-2,22) IF (II.EQ.22) THEN CALL CRCLS PRINT *,' ' PRINT *,' Buffer type #',-2,' is ',FRMTYP(-2) DO 3013 IKLJ = -1,19,2 PRINT *,' Type #',IKLJ,' is ',FRMTYP(IKLJ) ,' Type #',IKLJ+1,' is ',FRMTYP(IKLJ+1) CONTINUE PRINT *,' ' GOTO 3012 ENDIF IF (II.NE.21) TYPS(ICH) = II CALL CLLINE(19,12) CALL CLLINE(20,12) CALL CLLINE(21,12) CALL GOTOXY(0,20) CALL FR0PS2 CONTINUE PRINT *,' Frame number (0..999) or Run/Shot (xxxyyy, xxx=1..999, yyy=0 READ (*,'(BN,I6)',ERR=3015) IKJJLL GOTO 3016 IKJJLL = 0 IF (IKJJLL.NE.0) FNRNSN(ICH) = IKJJLL IF (ICH.EQ.4) THEN PRINT *,' ZERO BUFFER STATUS FLAG: ' PRINT *,' VALID FLAG = ',ZVALID,' 0=NO CHANGE, 1=Set True, 2=Set F

& 3013

* * * * 3014 ..999)' 3015 3016

alse, 3=Toggle' II = MENU(0,0,3) IF (II.EQ.3) THEN ZVALID = .NOT. ZVALID ELSEIF (II.EQ.2) THEN ZVALID = .FALSE. ELSEIF (II.EQ.1) THEN ZVALID = .TRUE. ENDIF ELSEIF (ICH.EQ.5) THEN PRINT *,' MAX. BUFFER STATUS FLAG: ' PRINT *,' VALID FLAG = ',AVALID,' 0=NO CHANGE, 1=Set True, 2=Set F alse, 3=Toggle' II = MENU(0,0,3) IF (II.EQ.3) THEN AVALID = .NOT. AVALID ELSEIF (II.EQ.2) THEN AVALID = .FALSE. ELSEIF (II.EQ.1) THEN AVALID = .TRUE. ENDIF ENDIF ELSEIF (IWHOP.EQ.19) THEN * OPMESS = ' SWAP BUFFERS ' IJ2 = MAX(IJ2S(1),IJ2S(2)) PRINT *,' COPY ',IJ2,' BYTES FROM $',HAPS(ICHS(1)),' TO $',HAPS(ICHS(2 )) CALL IIEXCH(BUF(1),BUF(2),IJ2) IJT = TYPS(ICHS(2)) IJX = LENXS(ICHS(2)) IJY = LENYS(ICHS(2)) IJF = FNRNSN(ICHS(2)) TYPS(ICHS(2)) = TYPS(ICHS(1)) LENXS(ICHS(2)) = LENXS(ICHS(1)) LENYS(ICHS(2)) = LENYS(ICHS(1)) FNRNSN(ICHS(2)) = FNRNSN(ICHS(1)) TYPS(ICHS(1)) = IJT LENXS(ICHS(1)) = IJX LENYS(ICHS(1)) = IJY FNRNSN(ICHS(1)) = IJF ICH = ICHS(1) I = CH45CK(ICH) * IF (ICH.EQ.4) THEN * ZVALID = TYPS(ICH).EQ.-1 .OR. TYPS(ICH).EQ.0 * PRINT *,ZVMESS,ZVALID * ELSEIF (ICH.EQ.5) THEN * AVALID = TYPS(ICH).EQ.5 .OR. TYPS(ICH).EQ.7 * PRINT *,AVMESS,AVALID * ENDIF ICH = ICHS(2) I = CH45CK(ICH) * IF (ICH.EQ.4) THEN * ZVALID = TYPS(ICH).EQ.-1 .OR. TYPS(ICH).EQ.0 * PRINT *,ZVMESS,ZVALID * ELSEIF (ICH.EQ.5) THEN * AVALID = TYPS(ICH).EQ.5 .OR. TYPS(ICH).EQ.7 * PRINT *,AVMESS,AVALID * ENDIF WRITE (11,'(A)') ' SWAP DONE ... ' ELSEIF (IWHOP.EQ.20) THEN

* ))

OPMESS = ' BI-CONDITIONAL REPLACEMENTS' ISW = IAPS(ICH) ISY = LENYS(ICH) IAPS(ICH) = IT LENYS(ICH) = IYL CALL C2D81T(ICH) IAPS(ICH) = ISW LENYS(ICH) = ISY FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) WRITE (11,*) 'Conditional replacement DONE ...' ELSEIF (IWHOP.EQ.21) THEN OPMESS = ' MASK BUFFERS' IJ = IJS(1) PRINT *,' MASKING ',IJ,' WORDS IN $',HAPS(ICHS(1)),' BY $',HAPS(ICHS(2 CALL IIMSK2(BUF(1),BUF(2),IJ) WRITE (11,'(A)') ' MASKING DONE ...' FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) I1I = TYPS(ICHS(1)) I2I = TYPS(ICHS(2)) IF (I1I.EQ.6.OR.I1I.EQ.-2.OR.I2I.EQ.6.OR.I2I.EQ.-2) THEN TYPS(ICHS(1)) = 6 ENDIF ELSEIF (IWHOP.EQ.22) THEN PRINT *,'ROTATING IMAGE IN BUFFER ',ICH CALL GOTOXY(0,20) PRINT *,' ENTER 0 FOR NO ROTATION .' IF (.NOT.PARTL) THEN PRINT *,' Rotate buffer Up(+)/Down(-) by how many rows?' READ (*,'(BN,I5)',ERR=2828) IQROW CALL GOTOXY(0,21) ELSE IQROW = 0 ENDIF PRINT *,' Rotate buffer Right(+)/Left(-) by how many columns?' READ (*,'(BN,I5)',ERR=2829) IQCOL ISHF = IQCOL + IQROW*IXL CALL IRTBUF(IT,ISHF,IXL,IYL) ELSEIF (IWHOP.EQ.23) THEN PRINT *,'CROPPING IMAGE IN BUFFER ',ICH CALL GOTOXY(0,20) PRINT *,'ENTER 0 FOR CURRENT EDGE' CALL GOTOXY(0,21) PRINT *,' NEW LEFT EDGE IS COLUMN NUMBER ? ' READ (*,'(BN,I5)',ERR=2930) IIIXS IF (IIIXS.LE.0) IIIXS = 1 CALL GOTOXY(0,21) PRINT *,' NEW RIGHT EDGE IS COLUMN NUMBER ? (negative is relative)' READ (*,'(BN,I5)',ERR=2931) IIIXE IF (IIIXE.EQ.0) IIIXE = IXL IF (IIIXE.LT.0) IIIXE = IXL + MOD(IIIXE,IXL) CALL GOTOXY(0,21) PRINT *,' NEW BOTTOM IS ROW NUMBER ? .' READ (*,'(BN,I5)',ERR=2932) IIIYS IF (IIIYS.LE.0) IIIYS = 1 CALL GOTOXY(0,21) PRINT *,' NEW TOP IS ROW NUMBER ? (negative is relative)' READ (*,'(BN,I5)',ERR=2933) IIIYE IF (IIIYE.EQ.0) IIIYE = IYL IF (IIIYE.LT.0) IIIYE = IYL + MOD(IIIYE,IYL)

2828

2829

2930

2931

2932

2933

CALL ICROP2(IT,IXL,IYL,IIIXS,IIIXE,IIIYS,IIIYE) LENXS(ICH) = IXL LENYS(ICH) = IYL FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) IF (ALTMOD) THEN 2934 CONTINUE ICH = ICH + 1 IF (ICH.GT.32) GOTO 1010 IF (.NOT.BUFGUD(ICH)) GOTO 2934 IF (LENXS(ICHS(1)).NE.LENXS(ICH)) GOTO 2934 IF (LENYS(ICHS(1)).NE.LENYS(ICH)) GOTO 2934 IXL = LENXS(ICH) IYL = LENYS(ICH) IT = IAPS(ICH) PRINT *,'CROP BUFFER ',ICH,'? (Y/n)' I = MENU(1,0,1) IF (I.EQ.0) GOTO 2934 CALL ICROP2(IT,IXL,IYL,IIIXS,IIIXE,IIIYS,IIIYE) LENXS(ICH) = IXL LENYS(ICH) = IYL GOTO 2934 ENDIF ELSEIF (IWHOP.EQ.24) THEN 3863 CONTINUE CALL CRCLS PRINT *,' SCALAR OPERATIONS ON BUFFER ' PRINT *,'WHICH? 0=SZB, 1=and, 2=or, 3=eor, 4=add, 5=sub, 6=EXIT, 7=ad m,' PRINT *,' 8=sin, 9=lsl, A=lsr, B=rol, C=ror ' IWHOP2 = MENU(0,0,12) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP2.EQ.6) GOTO 1010 3861 PRINT *,' WHAT VALUE TO OPERATE WITH? (0 .. $FFFF)' READ (*,'(A)',ERR=3861) GDUNGE IFILL = INTOF(GDUNGE) IF (IWHOP2.EQ.8.AND.(IFILL.LE.0.OR.IFILL.GT.$3FFF)) IFILL = $3FFF JFILL = IAND(IFILL,$0FFFF) KFILL = JFILL * 65536 IFILL = JFILL + KFILL IJ2 = IJ2S(1) HEXARR(1) = HEXOF(IFILL) IFILL = JFILL + KFILL CALL GOTOXY(20,0) PRINT *,' OPERATING ON BUFFER #',ICH,' @ $',HAPS(ICH),' with $',HEXARR (1) * IF (IWHOP2.EQ.0) THEN * CALL ISZB2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.1) THEN * CALL IAND2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.2) THEN * CALL IOR2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.3) THEN * CALL IEOR2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.4) THEN * CALL IADD2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.5) THEN * CALL ISUB2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.7) THEN * CALL IADM2T(IT,IJ2,IFILL) * ELSEIF (IWHOP2.EQ.8) THEN

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

* * * * * * * * * * *

CALL ISIN2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.9) THEN IFILL = MOD(IFILL,16) CALL ILSL2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.10) THEN IFILL = MOD(IFILL,16) CALL ILSR2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.11) THEN IFILL = MOD(IFILL,16) CALL IROL2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.12) THEN IFILL = MOD(IFILL,16) CALL IROR2(IT,IJ2,IFILL) ENDIF CALL SCALOP(IT,IJ2,IFILL,IWHOP2) WRITE (11,'(A)') ' OPERATING DONE ... ' FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) IF (ALTMOD) GOTO 3863 ELSEIF (IWHOP.EQ.25) THEN OPMESS = ' SQUEEZE BUFFER' IF (QGRUNT.AND.ALTMOD) THEN J = 5 ELSEIF (QGRUNT) THEN J = 3 ELSEIF (ALTMOD) THEN J = 2 ELSE PRINT *,'SQUEEZE BY ? (2 .. 10)' J = MENU(1,0,10) IF (J.EQ.1) J = 2 ENDIF I = MOD(IXL,J) IF (I.EQ.J) I = 0 IIIXS = (I+3)/2 IIIXE = IXL - I/2 IIIYS = 1 IIIYE = IYL IF (I.NE.0) CALL ICROP2(IT,IXL,IYL,IIIXS,IIIXE,IIIYS,IIIYE) IF (I.EQ.1) THEN CALL ICROP2(IT,IXL,IYL,2,IXL,1,IYL) ELSEIF (I.EQ.2) THEN CALL ICROP2(IT,IXL,IYL,2,IXL-1,1,IYL) ELSEIF (I.EQ.3) THEN CALL ICROP2(IT,IXL,IYL,3,IXL-1,1,IYL) ELSEIF (I.EQ.4) THEN CALL ICROP2(IT,IXL,IYL,3,IXL-2,1,IYL) ELSEIF (I.EQ.5) THEN CALL ICROP2(IT,IXL,IYL,4,IXL-2,1,IYL) ENDIF IXL = IXL - I LENXS(ICH) = IXL IJ2 = IXL*IYL*2 PRINT *,'SQUEEZING IMAGE WIDTH BY ',J IF (J.EQ.7) THEN CALL ISQ72T(IT,IJ2) LENXS(ICH) = (IXL+6)/7 ELSEIF (J.EQ.5.OR.J.EQ.10) THEN CALL ISQ52T(IT,IJ2) LENXS(ICH) = (IXL+4)/5 ELSEIF (J.EQ.3.OR.J.EQ.9) THEN

CALL ISQ32T(IT,IJ2) LENXS(ICH) = (IXL+2)/3 ELSE CALL ISQZ2T(IT,IJ2) LENXS(ICH) = (IXL+1)/2 ENDIF IXL = LENXS(ICH) IF (J.EQ.6.OR.J.EQ.9) THEN CALL ISQ32T(IT,IJ2) LENXS(ICH) = (IXL+2)/3 ELSEIF (J.EQ.4.OR.J.EQ.8.OR.J.EQ.10) THEN CALL ISQZ2T(IT,IJ2) LENXS(ICH) = (IXL+1)/2 ENDIF IXL = LENXS(ICH) IF (J.EQ.8) THEN CALL ISQZ2T(IT,IJ2) LENXS(ICH) = (IXL+1)/2 ENDIF WRITE (11,*) 'SQUEEZING DONE ...' FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) ELSEIF (IWHOP.EQ.27.OR.IWHOP.EQ.29) THEN IF (IWHOP.EQ.29) THEN 1700 PRINT *,' REPEAT COUNT? (0 .. 8)' READ (*,'(BN,I8)',ERR=1700) IRPT IF (IRPT.LT.0) IRPT = 1 IF (IRPT.GT.8) IRPT = 8 ELSE IRPT = 1 ENDIF PRINT *,' How many points? 3,5,7; even #''s = added 3pt.)' IPT = MENU(3,3,8) IF (IPT.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) ' 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 = 0 DO 1701 JK = 1,IRPT IIJ = IAND(III,$03) IIPT = IAND(IPT,$01) IF (JK.GT.1) PRINT *,' PASS ',JK,' OF ',IRPT IF (IIJ.EQ.1) THEN PRINT *,' MEDIAN SMOOTH X' IF (IPT.LE.4) THEN CALL IMED3X(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMED5X(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMED7X(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMED3X(IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' MEDIAN SMOOTH Y' IF (IPT.LE.4) THEN

CALL IMED3Y(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMED5Y(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMED7Y(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMED3Y(IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN PRINT *,' MEDIAN SMOOTH X&Y' IF (IPT.LE.4) THEN CALL IMED3(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMED5(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMED7(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMED3(IT,IXL,IYL) ENDIF IIJ = III/4 IIJ = IAND(IIJ,$03) IF (IIJ.EQ.1) THEN PRINT *,' MEDIAN SMOOTH Back DIAG.' CALL IMED3L(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMED3L(IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' MEDIAN SMOOTH DIAG.' CALL IMED3R(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMED3R(IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN PRINT *,' MEDIAN SMOOTH BOTH DIAG.' CALL IMED3D(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMED3D(IT,IXL,IYL) ENDIF 1701 CONTINUE WRITE (11,*) 'MEDIAN SMOOTHING DONE ...' ELSEIF (IWHOP.EQ.28.OR.IWHOP.EQ.30) THEN IF (IWHOP.EQ.30) THEN 1702 PRINT *,' REPEAT COUNT? (0 .. 8)' READ (*,'(BN,I8)',ERR=1702) IRPT IF (IRPT.LT.0) IRPT = 1 IF (IRPT.GT.8) IRPT = 8 ELSE IRPT = 1 ENDIF PRINT *,' How many points? 3,5,7; even #''s = added 3pt.)' IPT = MENU(3,3,8) IF (IPT.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), NO-OP(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 = 0 DO 1703 JK = 1,IRPT IIJ = IAND(III,$03) IIPT = IAND(IPT,$01)

IF (JK.GT.1) PRINT *,' PASS ',JK,' OF ',IRPT IF (IIJ.EQ.1) THEN PRINT *,' MEAN SMOOTH X' IF (IPT.LE.4) THEN CALL IMEN3X(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMEN5X(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMEN7X(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMEN3X(IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' MEAN SMOOTH Y' IF (IPT.LE.4) THEN CALL IMEN3Y(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMEN5Y(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMEN7Y(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMEN3Y(IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN PRINT *,' MEAN SMOOTH X&Y' IF (IPT.LE.4) THEN CALL IMEN3(IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IMEN5(IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IMEN7(IT,IXL,IYL) ENDIF IF (IIPT.EQ.0) CALL IMEN3(IT,IXL,IYL) ENDIF IIJ = III/4 IIJ = IAND(IIJ,$03) IF (IIJ.EQ.1) THEN PRINT *,' MEAN SMOOTH Back DIAG.' CALL IMEN3L(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMEN3L(IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' MEAN SMOOTH DIAG.' CALL IMEN3R(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMEN3R(IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN PRINT *,' MEAN SMOOTH BOTH DIAG.' CALL IMEN3D(IT,IXL,IYL) IF (IIPT.EQ.0) CALL IMEN3D(IT,IXL,IYL) ENDIF 1703 CONTINUE WRITE (11,*) 'MEAN SMOOTHING DONE ...' ELSEIF (IWHOP.EQ.34.OR.IWHOP.EQ.35) THEN IF (IWHOP.EQ.35) THEN 1750 PRINT *,' REPEAT COUNT? (0 .. 8)' READ (*,'(BN,I8)',ERR=1750) IRPT IF (IRPT.LT.0) IRPT = 1 IF (IRPT.GT.8) IRPT = 8 ELSE IRPT = 1 ENDIF PRINT *,' How many points? 3,5,7' IPT = MENU(3,3,7)

3185

3186 3187 * * * * *

IIPT = MOD(IPT,2) IF (IIPT.EQ.0) IPT = IPT - 1 J = 0 DO 3186 I = 1,IPT 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 CONTINUE IF (J.EQ.0) J = 1 CONVAR(0) = J PRINT *,'DIVISOR = ? (',J,' default)' READ (*,'(BN,I8)',ERR=3187) INPUT IF (INPUT.GT.0.AND.INPUT.LT.32767) CONVAR(0) = INPUT IF (IPT.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) ' 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 = 0 IKI = 0 ELSE PRINT *,' ABSOLUTE VALUE? (y/N)' IKI = MENU(0,0,1) ENDIF DO 1751 JK = 1,IRPT IF (IKI.EQ.1) THEN IIJ = IAND(III,$03) IIPT = IAND(IPT,$01) IF (JK.GT.1) PRINT *,' PASS ',JK,' OF ',IRPT IF (IIJ.EQ.1) THEN PRINT *,' CONVOLVE X' IF (IPT.LE.4) THEN CALL IANV3X(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IANV5X(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IANV7X(CONVAR(0),IT,IXL,IYL) ENDIF ELSEIF (IIJ.EQ.2) THEN PRINT *,' CONVOLVE Y' IF (IPT.LE.4) THEN CALL IANV3Y(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IANV5Y(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL IANV7Y(CONVAR(0),IT,IXL,IYL) ENDIF ELSEIF (IIJ.EQ.3) THEN PRINT *,' CONVOLVE X&Y' IF (IPT.LE.4) THEN CALL IANV3(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL IANV5(CONVAR(0),IT,IXL,IYL)

* * * * * * * * * * * * * * ELSE

ELSEIF (IPT.LE.8) THEN CALL IANV7(CONVAR(0),IT,IXL,IYL) ENDIF ENDIF IF (IPT.EQ.3) THEN IIJ = III/4 IIJ = IAND(IIJ,$03) IF (IIJ.EQ.1) THEN PRINT *,' CONVOLVE Back DIAG.' CALL IANV3L(CONVAR(0),IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' CONVOLVE DIAG.' CALL IANV3R(CONVAR(0),IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN PRINT *,' CONVOLVE BOTH DIAG.' CALL IANV3D(CONVAR(0),IT,IXL,IYL) ENDIF ENDIF IIJ = IAND(III,$03) IIPT = IAND(IPT,$01) IF (JK.GT.1) PRINT *,' PASS ',JK,' OF ',IRPT IF (IIJ.EQ.1) THEN PRINT *,' CONVOLVE X' IF (IPT.LE.4) THEN CALL ICNV3X(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL ICNV5X(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL ICNV7X(CONVAR(0),IT,IXL,IYL) ENDIF ELSEIF (IIJ.EQ.2) THEN PRINT *,' CONVOLVE Y' IF (IPT.LE.4) THEN CALL ICNV3Y(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL ICNV5Y(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL ICNV7Y(CONVAR(0),IT,IXL,IYL) ENDIF ELSEIF (IIJ.EQ.3) THEN PRINT *,' CONVOLVE X&Y' IF (IPT.LE.4) THEN CALL ICNV3(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.6) THEN CALL ICNV5(CONVAR(0),IT,IXL,IYL) ELSEIF (IPT.LE.8) THEN CALL ICNV7(CONVAR(0),IT,IXL,IYL) ENDIF ENDIF IF (IPT.EQ.3) THEN IIJ = III/4 IIJ = IAND(IIJ,$03) IF (IIJ.EQ.1) THEN PRINT *,' CONVOLVE Back DIAG.' CALL ICNV3L(CONVAR(0),IT,IXL,IYL) ELSEIF (IIJ.EQ.2) THEN PRINT *,' CONVOLVE DIAG.' CALL ICNV3R(CONVAR(0),IT,IXL,IYL) ELSEIF (IIJ.EQ.3) THEN

* * * * * * * * * *

* * * * 1751

PRINT *,' CONVOLVE BOTH DIAG.' CALL ICNV3D(CONVAR(0),IT,IXL,IYL) ENDIF ENDIF

ENDIF CONTINUE WRITE (11,*) 'CONVOLUTION DONE ...' ELSEIF (IWHOP.EQ.31.OR.IWHOP.EQ.32) THEN * communication is via common block variables, ASC & SCAN indicate simulated * keypress state variables, GTFM indicates that this is a call from within * another command and is a call to read frames only *31 == Alt-F8 and 32 == Alt-F9 GTFM = .TRUE. ASC = 0 SCAN = 80 + IWHOP I = FCALL3(FRAMES,IT,IT,IT) IF (I.EQ.911) THEN IF (SCAN.EQ.$C0.OR.SCAN.EQ.$87.OR.SCAN.EQ.$88) THEN IWHOP = 32 GOTO 3559 ELSEIF (SCAN.EQ.$AD.OR.SCAN.EQ.$AE) THEN IWHOP = 31 GOTO 3559 ENDIF ENDIF GTFM = .FALSE. CALL LEDSOF ELSEIF (IWHOP.EQ.33) THEN * ARRAY OPS 3864 CONTINUE CALL CRCLS PRINT *,' ARRAY OPERATIONS ON BUFFER ' PRINT *,'WHICH? 0=AND, 1=msk, 2=or, 3=eor, 4=adz, 5=mjg, 6=EXIT, 7=mj l,' PRINT *,' 8=sub, 9=add, A=mjl, B=mjg, C=d0v, D=div E=I2E F=E 2rho' PRINT *,' 16=E2rh0 ' IWHOP2 = MENU(0,0,16) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP2.EQ.6) GOTO 1010 IJ = IJS(1) PRINT *,' DOING ',IJ,' WORDS IN $',HAPS(ICHS(1)),' BY $',HAPS(ICHS(2)) IF (IWHOP2.EQ.0) THEN CALL IIAND2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.1) THEN CALL IIMSK2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.2) THEN CALL IIIOR2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.3) THEN CALL IIEOR2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.4) THEN CALL IIADZ2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.5) THEN CALL IIMJ2G(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.7) THEN CALL IIMJ2L(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.8) THEN CALL IISZB2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.9) THEN CALL IIADD2(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.10) THEN

CALL IIMJ2L(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.11) THEN CALL IIMJ2G(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.12) THEN CALL IID0VD(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.13) THEN CALL IIDIVD(BUF(1),BUF(2),IJ) ELSEIF (IWHOP2.EQ.14) THEN IWHOP = 44 GOTO 9444 ELSEIF (IWHOP2.EQ.15) THEN IWHOP = 42 GOTO 9444 ELSEIF (IWHOP2.EQ.16) THEN ALTMOD = .TRUE. IWHOP = 42 GOTO 9444 ENDIF WRITE (11,'(A)') ' OPERATION DONE ...' FNRNSN(ICHS(1)) = - ABS(FNRNSN(ICHS(1))) I1I = TYPS(ICHS(1)) I2I = TYPS(ICHS(2)) IF (I1I.EQ.6.OR.I1I.EQ.-2.OR.I2I.EQ.6.OR.I2I.EQ.-2) THEN TYPS(ICHS(1)) = 6 ENDIF IF (ALTMOD) GOTO 3864 ELSEIF (IWHOP.EQ.36) THEN * OPMESS = 'Single Quadrant E-CONVERSION; buffer to buffer' CALL CRCLS PRINT *,' ' LENXS(ICHS(2)) = LENXS(ICHS(1)) LENYS(ICHS(2)) = LENYS(ICHS(1)) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IJ = IJ2S(1) IT = BUF(2) PRINT *,'PREPARING BUFFERS ...' CALL IZAPIT(IT,IJ) TYPS(ICHS(2)) = -2 IF (AUTMED) THEN PRINT *,'SMOOTHING SOURCE BUFFER' CALL IMED3(BUF(1),IXL,IYL) IF (AUTMEN) CALL IMEN3(BUF(1),IXL,IYL) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) ENDIF IF (AVALID.AND.(LENXS(ICHS(1)).EQ.LENXS(5)).AND.(LENYS(ICHS(1)).EQ.LEN YS(5))) THEN PRINT *,' MASKING DESTINATION BUFFER WITH MAX. FRAME' IJ = IJS(1) CALL IIBTS2(BUF(2),IAPS(5),IJ) PRINT *,' MASKING SOURCE BUFFER WITH MAX. FRAME' IJ = IJS(1) CALL IIMSK2(BUF(1),IAPS(5),IJ) ENDIF IJ = IJS(1) PRINT *,' MASKING DESTINATION BUFFER WITH SOURCE' CALL IIBTS2(BUF(2),BUF(1),IJ) TYPS(ICHS(2)) = 6 CALL CRCLS

* *

PRINT *,' ' PRINT *,' PREPARATION DONE, BEGINNING DATA CHARACTERIZATION...' CALL NORM2L(BUF(1),IXL,IYL) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IIXL = KADDR(IXL) IIYL = KADDR(IYL) I = FCALL4(APORCP,BUF(1),BUF(2),IIXL,IIYL)

* * DO CONVERSION IJ = IJS(1) PRINT *,' ' IF (I.EQ.1) THEN * ALIGNED - CONVERSION IS ARC-COS PRINT *,'Starting COSine conversion for ALIGNED frame' CALL IIACOS(BUF(2),BUF(1),IJ) ELSEIF (I.EQ.-1) THEN * CROSSED - CONVERSION IS ARC-SIN PRINT *,'Starting SINe conversion for CROSSED frame' CALL IIASIN(BUF(2),BUF(1),IJ) ** ELSE *** ERROR - SHOULDN'T GET HERE ** CALL CLS ** PRINT *,'FROPS: I-to-|E| conversion: frame is neither aligned or crossed' ** PRINT *,' VILE BADNESS!! ' ** CALL FLASH ** CALL BEEP ** CALL FLASH ** TYPS(ICHS(2)) = 6 ** GOTO 1010 ENDIF * ITYP = TYPS(ICHS(1)) IF (ITYP.EQ.0.OR.ITYP.EQ.5.OR.ITYP.EQ.-1) THEN * 9 ==> '|E| from RAW data' TYPS(ICHS(2)) = 9 ELSEIF (ITYP.EQ.1.OR.ITYP.EQ.7) THEN * 10 ==> '|E| from ZRC data' TYPS(ICHS(2)) = 10 ELSEIF (ITYP.EQ.3) THEN * 11 ==> '|E| from NORMed data' TYPS(ICHS(2)) = 11 ELSEIF (ITYP.EQ.4) THEN * 12 ==> '|E| from ZRC&NORM data' TYPS(ICHS(2)) = 12 ELSEIF (ITYP.EQ.8) THEN * 13 ==> '|E| fm ZRC&ZRC-NORM' TYPS(ICHS(2)) = 13 ELSEIF (ITYP.EQ.2) THEN * 14 ==> '? |E| from ??' TYPS(ICHS(2)) = 14 ELSEIF (ITYP.EQ.-2) THEN TYPS(ICHS(2)) = -2 ELSEIF (ITYP.EQ.6) THEN TYPS(ICHS(2)) = 6 ENDIF ERR = -1 ASC = 0 SCAN = 0

ELSEIF (IWHOP.EQ.44) THEN OPMESS = 'MULTI-Quadrant E-CONVERSION; buffer to buffer' IF (.NOT.ISTEST) THEN PRINT *,' ' PRINT *,' Debugging mode ENabled? (y/N)' PRINT *,' ' I = MENU(0,0,1) ISTEST = I.EQ.1 ELSEIF (ISTEST) THEN PRINT *,' ' PRINT *,' Debugging mode DISabled? (y/N)' PRINT *,' ' I = MENU(0,0,1) ISTEST = I.EQ.0 ENDIF CNVDBG = ISTEST CALL CRCLS PRINT *,' ' DIDIT = .FALSE. ID = 0 9360 CONTINUE STRICT = ID.GE.1 I = PRPDUN() IF (I.EQ.0) THEN * If PRPDUN returns 0, the preparation for conversion has not been done, so we * attempt to do it or return if we've already tried IF (DIDIT.AND.ID.GE.2) THEN * tried preparation and it failed, ... CALL GOTOXY(0,0) CALL CLS CALL FLASHB PRINT *,'FROPS: CANNOT CONVERT, PREPARATION FAILS' CALL BEEP CALL FLASHB CALL WAIT(2.0) GOTO 1011 ELSE * try preparation, maybe it'll work IF (CNVDBG) THEN PRINT *,'FROPS: Conversion preparation not done, trying: i ter=',ID ENDIF DIDIT = .TRUE. IF (ID.NE.0) THEN CALL NSTFX0(.TRUE.) CALL NSTMSK(.FALSE.) ENDIF ID = ID + 1 CALL PRPCVA GOTO 9360 ENDIF ELSEIF (I.LT.0.AND.ID.GE.4) THEN PRINT *,'FROPS: CANNOT CONVERT, PREPARATION FAILS' CALL BEEP CALL FLASHB CALL WAIT(2.0) GOTO 1011 ELSEIF (I.LT.0) THEN IF (CNVDBG) THEN PRINT *,'FROPS: Conversion preparation done, BUT FOR DIFFERENT *

SIZE FRAME' PRINT *,' Redoing conversion preparation.' ENDIF DIDIT = .TRUE. ID = ID + 1 CALL PRPCVA GOTO 9360 ELSEIF ((ISTEST.OR.CNVDBG).AND.(.NOT.DIDIT)) THEN CALL GOTOXY(0,0) CALL GRCLS PRINT *,'FROPS: Conversion preparation done, FORCE REPEAT? (y/N)' I = MENU(0,0,1) IF (I.EQ.1) THEN DIDIT = .TRUE. CALL PRPCVA ENDIF ENDIF * LENXS(ICHS(2)) = LENXS(ICHS(1)) * LENYS(ICHS(2)) = LENYS(ICHS(1)) * IXL = LENXS(ICHS(1)) * IYL = LENYS(ICHS(1)) * IJ = IJ2S(1) * IT = BUF(2) * PRINT *,'PREPARING BUFFERS ...' * CALL IZAPIT(IT,IJ) * TYPS(ICHS(2)) = -2 PRINT *,'PREPARING BUFFERS ...' * IF (AUTMED) THEN * PRINT *,'SMOOTHING SOURCE BUFFER' * CALL IMED3(BUF(1),IXL,IYL) * IF (AUTMEN) CALL IMEN3(BUF(1),IXL,IYL) * IXL = LENXS(ICHS(1)) * IYL = LENYS(ICHS(1)) * ENDIF * IF (AVALID.AND.(LENXS(ICHS(1)).EQ.LENXS(5)).AND.(LENYS(ICHS(1)).EQ.LE NYS(5))) THEN * PRINT *,' MASKING DESTINATION BUFFER WITH MAX. FRAME' * IJ = IJS(1) * CALL IIBTS2(BUF(2),IAPS(5),IJ) * PRINT *,' MASKING SOURCE BUFFER WITH MAX. FRAME' * IJ = IJS(1) * CALL IIMSK2(BUF(1),IAPS(5),IJ) * ENDIF * IJ = IJS(1) * PRINT *,' MASKING DESTINATION BUFFER WITH SOURCE' * CALL IIBTS2(BUF(2),BUF(1),IJ) * TYPS(ICHS(2)) = 6 * B1 = ICHS(1) * B2 = ICHS(2) BUF(3) = IAPS(5) CALL CRCLS PRINT *,' ' PRINT *,' PREPARATION DONE, BEGINNING DATA CHARACTERIZATION...' * CALL NORM2L(BUF(1),IXL,IYL) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IIXL = KADDR(IXL) IIYL = KADDR(IYL) * PRINT *,' CHARACTERIZATION done, calling I2E ....' * DO CONVERSION

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

IF (ALTMOD) THEN I = FCALL4(I2EALT,BUF(1),BUF(2),IIXL,IIYL) ELSE I = FCALL4(I2E,BUF(1),BUF(2),IIXL,IIYL) ENDIF IF (CNVDBG) CALL WAIT(1.0) IJ = IJS(1) ITYP = TYPS(ICHS(1)) IF (ITYP.EQ.0.OR.ITYP.EQ.5.OR.ITYP.EQ.-1) THEN 9 ==> '|E| from RAW data' TYPS(ICHS(2)) = 9 ELSEIF (ITYP.EQ.1.OR.ITYP.EQ.7) THEN 10 ==> '|E| from ZRC data' TYPS(ICHS(2)) = 10 ELSEIF (ITYP.EQ.3) THEN 11 ==> '|E| from NORMed data' TYPS(ICHS(2)) = 11 ELSEIF (ITYP.EQ.4) THEN 12 ==> '|E| from ZRC&NORM data' TYPS(ICHS(2)) = 12 ELSEIF (ITYP.EQ.8) THEN 13 ==> '|E| fm ZRC&ZRC-NORM' TYPS(ICHS(2)) = 13 ELSEIF (ITYP.EQ.2) THEN 2 ==> 'Simulated Data' TYPS(ICHS(2)) = 2 ELSEIF (ITYP.EQ.-2) THEN TYPS(ICHS(2)) = -2 ELSEIF (ITYP.EQ.6) THEN TYPS(ICHS(2)) = 6 ELSE 14 ==> '? |E| from ??' TYPS(ICHS(2)) = 14 ENDIF ERR = -1 ASC = 0 SCAN = 0 ELSEIF (IWHOP.EQ.42) THEN OPMESS = ' rho CONVERSION; buffer to buffer' IF ((ICHS(2).EQ.4.AND.ZVALID).OR.(ICHS(2).EQ.5.AND.AVALID)) THEN WRITE (11,'(A)') 'THAT BUFFER MUST NOT BE SMASHED! ' WRITE (11,'(A)') ' CHOOSE NEW DESTINATION (SECOND BUFFER)' CALL WAITQ(0.85) OPNUM = 2 GOTO 3553 ENDIF CALL CRCLS PRINT *,' ' LENXS(ICHS(2)) = LENXS(ICHS(1)) LENYS(ICHS(2)) = LENYS(ICHS(1)) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IJ = IJ2S(1) IT = BUF(2) PRINT *,'PREPARING BUFFERS ...' IFILL = 0 CALL IHITIT(IT,IJ,IFILL) CALL IZAPIT(IT,IJ) TYPS(ICHS(2)) = -2

* * * * * * * *

* *

IF (AUTMED) THEN PRINT *,'SMOOTHING SOURCE BUFFER' CALL IMED3(BUF(1),IXL,IYL) IF (AUTMEN) CALL IMEN3(BUF(1),IXL,IYL) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) ENDIF IF (AVALID.AND.(LENXS(ICHS(1)).EQ.LENXS(5)).AND.(LENYS(ICHS(1)).EQ.LEN YS(5))) THEN PRINT *,' MASKING DESTINATION BUFFER WITH MAX. FRAME' IJ = IJS(1) CALL IIBTS2(BUF(2),IAPS(5),IJ) PRINT *,' MASKING SOURCE BUFFER WITH MAX. FRAME' IJ = IJS(1) CALL IIMSK2(BUF(1),IAPS(5),IJ) ENDIF IJ = IJS(1) PRINT *,' MASKING DESTINATION BUFFER WITH SOURCE' CALL IIBTS2(BUF(2),BUF(1),IJ) TYPS(ICHS(2)) = 6 CALL CRCLS PRINT *,' ' * PRINT *,' PREPARATION DONE, BEGINNING DATA CHARACTERIZATION...' * CALL NORM2L(BUF(1),IXL,IYL) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IIXL = KADDR(IXL) IIYL = KADDR(IYL) * * DO CONVERSION IF (ALTMOD) THEN I = FCALL4(E2RH0,BUF(1),BUF(2),IIXL,IIYL) ELSE I = FCALL4(E2RHO,BUF(1),BUF(2),IIXL,IIYL) ENDIF * * * ITYP = TYPS(ICHS(1)) * IF (ITYP.GE.9.AND.ITYP.LE.14) THEN * TYPS(ICHS(2)) = ITYP + 6 * ELSEIF (ITYP.EQ.0.OR.ITYP.EQ.5.OR.ITYP.EQ.-1) THEN ** 15 ==> 'rho from RAW data' * TYPS(ICHS(2)) = 15 * ELSEIF (ITYP.EQ.1.OR.ITYP.EQ.7) THEN ** 16 ==> 'rho from ZRC data' * TYPS(ICHS(2)) = 16 * ELSEIF (ITYP.EQ.3) THEN ** 17 ==> 'rho from NORMed data' * TYPS(ICHS(2)) = 17 * ELSEIF (ITYP.EQ.4) THEN ** 18 ==> 'rho from ZRC&NORM data' * TYPS(ICHS(2)) = 18 * ELSEIF (ITYP.EQ.8) THEN ** 19 ==> 'rho fm ZRC&ZRC-NORM' * TYPS(ICHS(2)) = 19 * ELSEIF (ITYP.EQ.2) THEN ** 2 ==> 'Simulated Data' * TYPS(ICHS(2)) = 2 * ELSEIF (ITYP.EQ.-2) THEN * TYPS(ICHS(2)) = -2

* * * ** * *

* 9509

9508

C C C C C C *

9511 9512

ELSEIF (ITYP.EQ.6) THEN TYPS(ICHS(2)) = 6 ELSE 20 ==> '? rho from ??' TYPS(ICHS(2)) = 20 ENDIF ERR = -1 ASC = 0 SCAN = 0 ELSEIF (IWHOP.EQ.37) THEN OPMESS = ' TRIM EDGES ' IT = BUF(1) IF (ALTMOD) THEN CALL ITWIM(IT,IXL,IYL) ELSE CALL ITRIM(IT,IXL,IYL) ENDIF ELSEIF (IWHOP.EQ.38) THEN OPMESS = ' LINEAR RESCALE' PRINT *,'New value for minimum? (0..16382) ' READ (*,'(A)',ERR=9509) GDUNGE IOFF = INTOF(GDUNGE) IF (IOFF.LT.0.OR.IOFF.GT.16382) IOFF = 0 PRINT *,'New value for maximum? (',IOFF+16,'..16383)' READ (*,'(A)',ERR=9508) GDUNGE NRMVAL = INTOF(GDUNGE) IF (NRMVAL.GT.16383) NRMVAL = 16383 IF (NRMVAL.GT.(IOFF+16)) NRMVAL = NRMVAL - IOFF IT = BUF(1) IF (ALTMOD) THEN CALL INRMT0(IT,IXL,IYL,NRMVAL,IOFF) ELSE CALL INRMTO(IT,IXL,IYL,NRMVAL,IOFF) ENDIF ELSEIF (IWHOP.EQ.39) THEN CALL WFMOPS GOTO 3552 ELSEIF (IWHOP.EQ.40) THEN CALL SLCOPS GOTO 3552 ELSEIF (IWHOP.EQ.41) THEN OPMESS = '''EXPLODE'' FRAME AS MULTIPLOT' IT = BUF(1) IS = BUF(2) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IIXL = KADDR(IXL) IIYL = KADDR(IYL) IIPL = KADDR(PLOTYP) CALL RPLTYP(PLOTYP) CALL CRCLS CALL NRMSLF(IT,IXL,IYL,NRMVAL,IOFF) IT = BUF(1) IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IF (ALTMOD) THEN PRINT *,'STARTING @ 1..',IYL READ (*,'(BN,I3)',ERR=9511) IS IF (IS.LT.0.OR.IS.GT.IYL) IS = 1 PRINT *,'ENDING @ 1..',IYL

READ (*,'(BN,I3)',ERR=9512) IE IF (IE.LT.0.OR.IE.GT.IYL) IE = IYL 9513 PRINT *,'EVERY HOW MANY?' READ (*,'(BN,I3)',ERR=9511) IM IF (IM.LT.0.OR.IM.GT.IYL) IM = 1 CALL SPLSLC CALL RPLTYP(PLOTYP) IIS = KADDR(IS) IIE = KADDR(IE) IIM = KADDR(IM) CALL CALL8(XPL0DE,IT,IS,IIXL,IIYL,IIS,IIE,IIM,IIPL) ELSEIF (QGRUNT) THEN CALL CALL4(XPLODE,IT,IS,IIXL,IIYL) ELSE CALL CALL5(XPLOD3,IT,IS,IIXL,IIYL,IIPL) ENDIF ELSEIF (IWHOP.EQ.43) THEN * OPMESS = ' SAVE BUFFER AS ASCII ' CALL CLLINE(0,12) CALL GOTOXY(0,0) PRINT *,'Storing (ASCII) buffer #',ICH,' @ $',HAPS(ICHS(1)) CALL FASTAR(ICH) ELSEIF (IWHOP.EQ.45) THEN * OPMESS = ' Image FLIPS ' CALL FLIPS(ICH) ELSEIF (IWHOP.EQ.46) THEN * OPMESS = 'E - Rho Plots ' IXL = LENXS(ICHS(1)) IYL = LENYS(ICHS(1)) IIXL = KADDR(IXL) IIYL = KADDR(IYL) I1 = TYPS(ICHS(1)) I3 = TYPS(ICHS(2)) IF ( (I1.GE.15.AND.I1.LE.20) .AND. .NOT. (I3.GE.15.AND.I3.LE.20) ) THE N I1 = BUF(2) I3 = BUF(1) ELSE I1 = BUF(1) I3 = BUF(2) ENDIF IF (ALTMOD) THEN I = FCALL4(ERH0PL,I1,I3,IIXL,IIYL) ELSE I = FCALL4(ERHOPL,I1,I3,IIXL,IIYL) ENDIF ENDIF 1011 CONTINUE IWHOP = KTEST3(-1,0,MXV) IF (IWHOP.GT.0) GOTO 3559 IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 1010 CALL WAITQ(0.35) IWHOP = KTEST3(-1,0,MXV) 1010 CONTINUE IF (ABORT.OR.ESCAPE.OR.INTRPT) THEN ERR = -1 ABORT = .FALSE. ESCAPE = .FALSE. INTRPT = .FALSE. GOTO 1000

ENDIF IF (IWHOP.GT.0) GOTO 3559 GOTO 3552 2 CONTINUE 1000 CONTINUE RETURN END *---------------------------------------------------------------------$SEGMENT FRAM0PS INTEGER*4 FUNCTION FR0PS(NUMOPS,IWHOP,OPMESS,PARTL,ALTMOD,QGRUNT) CHARACTER*8 HEXOF,HEXARR(10),HAPS(32),FNAME*24,FNAME2*24 CHARACTER*22 PADS*3,FRAME*20,FRMTYP(-2:20),ZVMESS,AVMESS CHARACTER*1 NCRUDQ,TC,TCALGN(2),OPMESS*36,GDUNGE*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 D170(170,120),D20480(20480) INTEGER*4 CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR,FCALL4,KADDR,J,ICHA INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,IFILL,JFILL,KF ILL 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),KTEST3,IXL,IYL INTEGER*4 TYPFRM,NFRAME,NDRIVE,LENS(32),APS(0:7),LNS(0:7),IIIXS,IIIXE INTEGER*4 LENFR,LENTR,NTR,INTOF,MENUFM,IJS(3),IJ2S(3),IJ,IJ2,ICH INTEGER*4 IXNUM,IYNUM,IA128,SENDAT,SENBAS,BUF(3),IIIYS,IIIYE,CONVAR(0:7) INTEGER*4 CUMUL(0:16383),IGNORE,IGNOR,MODE,GETINT,IOFF,NRMVAL,PLOTYP INTEGER*4 FCALL3,CH45CK INTEGER*2 TYP(3),ICHS(3),IASC,ISCAN,IKBF1,IKBF2,IERR,DEFBUF INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32),LENYS(32),FNRNSN(32) INTEGER*2 LENXS(32),BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383) LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,ISOPEN,GTFM LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32),EXIT,CONFRM LOGICAL*2 AUTMED,AUTMEN LOGICAL*1 PARTL,ALTMOD,QGRUNT 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) 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)) COMMON /BLKPRM/CMAGF,XART,YART,XOP,YOP,XLOC,YLOC,ARRADR COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARAUT/GTFM 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,/BUFDEF/DEFBUF 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,/SMOOTH/AUTMED,AUTMEN COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/XFRAME/TYPFRM,FRMTYP COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/CNFRM/CONFRM COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384 COMMON /PARCUM/IGNOR,PROFIL,CUMUL,/WFMOUT/DATA,/PARPLZ/R500 SAVE /PARCUM/,/PARNML/,/PARNM2/,/BLKPRM/,/BUFDEF/,/SMOOTH/,/PARAUT/ SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPR2/,/FRAMLN/,/OMABFL/,/OMATYP/ SAVE /ZEROS/,/AMPLS/,/OMACNT/,/XFRAME/,/OMABFR/,/OMADSK/,/CNFRM/ SAVE /WFMOUT/,/PARPLZ/,PLOTYP EXTERNAL HEXOF,MENUFM,KTEST3,ISQZ2T,FRAMES,CALL3,FCALL4,KADDR EXTERNAL GETINT,FCALL3,XPLODE,XPL0DE,CALL4,CALL8,CALL5,XPLOD3 EXTERNAL OMAZRO SAVE * ZVMESS = 'ZERO BUFFER VALID? = ' AVMESS = 'MAX. BUFFER VALID? = ' FR0PS = 0 IF (IWHOP.EQ.6.OR.INTRPT.OR.ESCAPE.OR.ABORT) THEN GOTO 2 ELSEIF (IWHOP.EQ.1) THEN NUMOPS = 2 OPMESS = ' COPY BUFFER TO BUFFER' ELSEIF (IWHOP.EQ.2) THEN NUMOPS = 1 OPMESS = ' GET BUFFER FROM DISK ' ELSEIF (IWHOP.EQ.3) THEN NUMOPS = 1 OPMESS = ' SAVE BUFFER TO DISK ' ELSEIF (IWHOP.EQ.4) THEN NUMOPS = 1 OPMESS = ' DISPLAY BUFFER ' ELSEIF (IWHOP.EQ.5) THEN CALL BUFSTA GOTO 3552 ELSEIF (IWHOP.EQ.26) THEN CALL CRCLS PRINT *,'WHAT DRIVE? (0 .. 9, 10=DEFAULT DRIVE) ' IDR = MENU(0,0,10) IF (IDR.EQ.10) IDR = -1 CALL XYGOTO(0,4) PRINT *,'OUTPUT TO WHERE? (0=SCREEN, 1=print, 2=disk file)' IUNIT = MENU(0,0,2) IF (IUNIT.EQ.1) THEN IUNIT = 7 CALL PRTEST ELSEIF (IUNIT.EQ.2) THEN IUNIT = 10 PRINT *,' What file? ' READ (*,'(A)') FNAME CALL FNCHCK(FNAME,'FIL',FNAME2) OPEN (UNIT=10,FILE=FNAME2,STATUS='NEW',ERR=3449) ENDIF 3449 CONTINUE INQUIRE (UNIT=IUNIT,OPENED=ISOPEN) IF (.NOT.ISOPEN) THEN PRINT *,' COULD NOT OPEN SPECIFIED OUTPUT DEVICE ' PRINT *,' ' IUNIT = 0

ENDIF CALL DIRDIR(IDR,'@???@###DAT',' ',IUNIT) WRITE (11,*,ERR=3448) ' HIT ANY KEY TO CONTINUE ' 3448 CONTINUE CALL ISNTRP IF (IERR.NE.0) GOTO 3448 GOTO 3552 ELSEIF (IWHOP.EQ.7) THEN NUMOPS = 1 OPMESS = ' DO ZERO CORRECTION OF BUFFER' IF (.NOT.ZVALID) THEN PRINT *,' Zero buffer data may be invalid, PROCEED? (y/N) ' IFOO = MENU(0,0,1) IF (IFOO.EQ.0) GOTO 3552 ENDIF ERR = -1 ASC = 0 SCAN = 0 ELSEIF (IWHOP.EQ.8) THEN NUMOPS = 1 OPMESS = ' DO NORMALIZATION OF BUFFER' IF (.NOT.AVALID) THEN PRINT *,' Max. buffer data may be invalid, PROCEED? (y/N) ' IFOO = MENU(0,0,1) IF (IFOO.EQ.0) GOTO 3552 ENDIF ERR = -1 ASC = 0 SCAN = 0 ELSEIF (IWHOP.EQ.9) THEN NUMOPS = 2 OPMESS = ' Sum of two buffers into first buffer' ELSEIF (IWHOP.EQ.10) THEN NUMOPS = 2 OPMESS = ' Difference of two buffers into first' ELSEIF (IWHOP.EQ.11) THEN NUMOPS = 2 IF (ALTMOD) THEN OPMESS = ' Merge MINIMA of both buffers into first' ELSE OPMESS = ' Merge MAXIMA of both buffers into first' ENDIF ELSEIF (IWHOP.EQ.12) THEN NUMOPS = 2 OPMESS = ' Ratio of two buffers into first buffer' ELSEIF (IWHOP.EQ.13) THEN NUMOPS = 1 OPMESS = ' Fill buffer with a specified input ' ELSEIF (IWHOP.EQ.14) THEN NUMOPS = 1 OPMESS = ' Mul/Div buffer ' ELSEIF (IWHOP.EQ.15) THEN NUMOPS = 1 OPMESS = ' LSL buffer ' ELSEIF (IWHOP.EQ.16) THEN NUMOPS = 1 OPMESS = ' LSR buffer ' ELSEIF (IWHOP.EQ.17) THEN NUMOPS = 1 OPMESS = ' CONDITIONAL REPLACEMENTS'

ELSEIF (IWHOP.EQ.18) THEN NUMOPS = 1 OPMESS = ' PARAMETER OVERRIDES' ELSEIF (IWHOP.EQ.19) THEN NUMOPS = 2 OPMESS = ' SWAP BUFFERS ' ELSEIF (IWHOP.EQ.20) THEN NUMOPS = 1 OPMESS = ' BI-CONDITIONAL REPLACEMENTS' ELSEIF (IWHOP.EQ.21) THEN NUMOPS = 2 OPMESS = ' MASKING BUFFER ' ELSEIF (IWHOP.EQ.22) THEN NUMOPS = 1 OPMESS = ' SHUFFLE BUFFER' ELSEIF (IWHOP.EQ.23) THEN NUMOPS = 1 OPMESS = ' CROP BUFFER' ELSEIF (IWHOP.EQ.24) THEN NUMOPS = 1 OPMESS = ' Scalar operations' ELSEIF (IWHOP.EQ.25) THEN NUMOPS = 1 QGRUNT = PARTL IF (QGRUNT.AND.ALTMOD) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 5' ELSEIF (QGRUNT) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 3' ELSEIF (ALTMOD) THEN OPMESS = ' SQUEEZE BUFFER HORIZONTALLY by 2' ELSE OPMESS = ' SQUEEZE BUFFER HORIZONTALLY ' ENDIF ELSEIF (IWHOP.EQ.27.OR.IWHOP.EQ.29) THEN NUMOPS = 1 OPMESS = ' MEDIAN SMOOTH BUFFER' ELSEIF (IWHOP.EQ.28.OR.IWHOP.EQ.30) THEN NUMOPS = 1 OPMESS = ' MEAN SMOOTH BUFFER' ELSEIF (IWHOP.EQ.31.OR.IWHOP.EQ.32) THEN NUMOPS = 1 IF (IWHOP.EQ.31) THEN OPMESS = ' FSREAD - Frame Synchronous READ from OMA' ELSE OPMESS = ' FXREAD - LASER & Frame Synchronous READ from OMA' ENDIF ICH = 1 OPNUM = 1 PARTL = .FALSE. GOTO 3560 ELSEIF (IWHOP.EQ.33) THEN NUMOPS = 2 OPMESS = ' ARRAY operations' ELSEIF (IWHOP.EQ.34.OR.IWHOP.EQ.35) THEN NUMOPS = 1 OPMESS = ' CONVOLVE BUFFER' ELSEIF (IWHOP.EQ.36) THEN NUMOPS = 2 OPMESS = 'Single Quadrant E-CONVERSION; buffer to buffer' ELSEIF (IWHOP.EQ.37) THEN

NUMOPS = 1 OPMESS = ' TRIM EDGES ' ELSEIF (IWHOP.EQ.38) THEN NUMOPS = 1 OPMESS = ' LINEAR RESCALE' ELSEIF (IWHOP.EQ.39) THEN CALL WFMOPS GOTO 3552 ELSEIF (IWHOP.EQ.40) THEN CALL SLCOPS GOTO 3552 ELSEIF (IWHOP.EQ.41) THEN NUMOPS = 2 OPMESS = '''EXPLODE'' FRAME AS MULTIPLOT' QGRUNT = PARTL ELSEIF (IWHOP.EQ.42) THEN NUMOPS = 2 OPMESS = 'RHO-CONVERSION: BUFFER TO BUFFER' ELSEIF (IWHOP.EQ.43) THEN NUMOPS = 1 OPMESS = 'SAVE ASCII FRAME FILE' ELSEIF (IWHOP.EQ.44) THEN NUMOPS = 2 OPMESS = 'E-CONVERSION: Multi-Fringe' ELSEIF (IWHOP.EQ.45) THEN NUMOPS = 1 OPMESS = 'Image FLIPS ' ELSEIF (IWHOP.EQ.46) THEN NUMOPS = 2 OPMESS = 'E - Rho Plots ' ENDIF RETURN * 3560 FR0PS = 3560 RETURN 3552 FR0PS = 3552 RETURN 2 FR0PS = 2 RETURN * ENTRY CH45CK(ICHA) IF (ICHA.EQ.4) THEN ZVALID = TYPS(ICHA).EQ.-1 .OR. TYPS(ICHA).EQ.0 PRINT *,ZVMESS,ZVALID ELSEIF (ICHA.EQ.5) THEN AVALID = TYPS(ICHA).EQ.5 .OR. TYPS(ICHA).EQ.7 PRINT *,AVMESS,AVALID ENDIF CH45CK = ICHA RETURN END *---------------------------------------------------------------------SUBROUTINE SCALOP(IT,IJ2,IFILL,IWHOP2) INTEGER*4 IWHOP2,IFILL,IT,IJ2 EXTERNAL ISZB2,IAND2,IOR2T,IEOR2,IADD2,ISUB2,IADM2,ISIN2,ILSL2,ILSR2,IROL2 ,IROR2 IF (IWHOP2.EQ.0) THEN CALL ISZB2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.1) THEN CALL IAND2T(IT,IJ2,IFILL)

ELSEIF (IWHOP2.EQ.2) THEN CALL IOR2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.3) THEN CALL IEOR2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.4) THEN CALL IADD2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.5) THEN CALL ISUB2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.7) THEN CALL IADM2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.8) THEN CALL ISIN2T(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.9) THEN IFILL = MOD(IFILL,16) CALL ILSL2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.10) THEN IFILL = MOD(IFILL,16) CALL ILSR2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.11) THEN IFILL = MOD(IFILL,16) CALL IROL2(IT,IJ2,IFILL) ELSEIF (IWHOP2.EQ.12) THEN IFILL = MOD(IFILL,16) CALL IROR2(IT,IJ2,IFILL) ENDIF RETURN END *---------------------------------------------------------------------SUBROUTINE FR0PS1(I) INTEGER*4 I IF (I.EQ.1) THEN CALL CLS PRINT *,' FRAME OPERATIONS; YOUR CHOICE? (CAPS = Partial, NumL=AltO p)' PRINT *,' ' PRINT *,' 1) COPY BUFFER a -> b 40) :8 SLICE OPerations ' PRINT *,' 2) GET BUFFER from Disk 3) STORE BUFFER TO DISK' PRINT *,' 4) DISPLAY BUFFER <== DEFAULT 39) :7 WFM OPS' PRINT *,' 5) DISPLAY BUFFER STATUS 26) |A LIST FRAMES ON D ISK' PRINT *,' 6) EXIT TO PRIOR LEVEL' ELSEIF (I.EQ.2) THEN PRINT *,' 7) ZERO CORRECT BUFFER 8) NORMALIZE BUFFER ' PRINT '(A74)', & ' 9) Add buffers: a + b -> a 10) A Subtract buffers: a - b -> a' PRINT *,'11) B MaxMrg buffer a -> b (NumLock for MinMrg) ' PRINT *,'12) C Divide: a / b -> a 21) |5 Mask buffer' ELSEIF (I.EQ.3) THEN PRINT *,'13) D Fill buffer 36) :4 Single Quad. I2E ' PRINT *,'14) E Mul/Div buffer 38) :6 Linear Rescale ' PRINT *,'15) F LSL buffer [ROL] 16) |0 LSR buffer [ROR] ' PRINT *,'17) |1 Conditional replace 20) |4 BI-Cond. replace ' PRINT *,'18) |2 Override buffer parameters 41) :9 Explode Frame'

ELSEIF (I.EQ.4) THEN PRINT *,'19) |3 SWAP BUFFERS (exchange) ORIZ.' PRINT *,'22) |6 SHUFFLE (Rotate) IMAGE R ' ' PRINT *,'24) |8 Scalar Operations

25) |9 SQUEEZE BUFFER H 23) |7 CROP IMAGE/BUFFE 33) :1 Array operations

PRINT '(A68)','27) |B Median SMOOTH (29 |D repeat) 28) |C Mean sm''t h (30 |E rpt)' PRINT *,'34) :2 CONVOLUTION (35 repeated) 32) :0 FXREAD [31) |F FSREAD] ' PRINT *,'37) :5 TRIM edges [1] 43) :B ASCII frame save ' PRINT *,'42) :A E -> Rho Conversion 44) :C I -> E-Field Con version' PRINT *,'45) :D Image FLIPS 46) :E E - Rho Plots ' ENDIF RETURN END *---------------------------------------------------------------------SUBROUTINE FR0PS2 CALL CLLINE(19,12) CALL CLLINE(20,12) CALL CLLINE(21,12) CALL CLLINE(22,12) CALL CLLINE(23,12) CALL GOTOXY(0,20) RETURN END

Você também pode gostar