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

******************************************************************************* * 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, CTSTSUB.FOR, MTSTSUB.FOR, FRAMOP.FOR, AFROP.ASM, I2EPREP.FOR * * MORFROP.ASM and I2R.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 CTSTSUB2 *compiler is directed to place object code in segment CTSTSUB2 * *-----------------------------------------------------------------------------* $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 CTSTSUB2 * * INTEGER FUNCTION PACONT(A128,IJKLI) * *=============================================================================* *SEGMENT MTSTSUB2 * * INTEGER*4 FUNCTION APORCP(BUF,REFBUF,LX,LY) * *=============================================================================* *SEGMENT SLICE_OP * * SUBROUTINE SLCOPS * * ENTRY OPSSLC(IIWHOP) * * ENTRY SLCSTA * ******************************************************************************** *---------------------------------------------------------------------INTEGER FUNCTION PACONT(A128,IJKLI) CHARACTER*20 FRAME,FRAME2,FLNM,DFRAME,INPUTS,INPUT2 CHARACTER PROGNM*18,MAINLN*54 CHARACTER*8 HEXOF,RESULT,INPUT,FLAG,DATAHX,HX128,HX256,HX512,SRHEX CHARACTER*8 HEXARR(10),SSPHEX,LOOPPT,DBHEX,LOOP2H,HAPS(32),ENDIS(0:1) CHARACTER PADS*3,NCRUDQ*1,FILNAM*24,FRMTYP(-2:20)*22 CHARACTER*36 PSTATS(0:4),PSTAT(0:4),TC*1,TCALGN(2)*1,OPMESS CHARACTER*1 C1,C2,POLAR*2 REAL*4 CHGVLT,TLASER,DTIME*8,SET*8,TIME*8,VLTCHG,TINCR INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCRMRK,NNTR,LLENFR 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),APS(0:7) INTEGER*4 TYPFRM,NFRAME,NDRIVE,HEADER,RUNNUM,SHOTNO,LNS(0:7),ISTAT INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,LLENTR,DELETE,KILLFI INTEGER*4 LENFR,LENTR,NTR,PICPAG,GRPHPG,GRPAGE,CUMUL(0:16383) INTEGER*4 GETIVC,GETSSP,HERE,GETBAK,GETBK2,FRAMES,IGNORE,LEVEL,OLEVEL INTEGER*4 ADDRDB,DBADDR,DEREF,REENTR,PAREAD,PARE0D,PARE1D,PARE2D,DEFKKK INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,SENDAT,FLPEEK,INTOF,KADDR INTEGER*4 DATA12,DATA22,DATA13,DATA23,PARARG,MILLIS,SPEC,X0,LENS(32) INTEGER*4 ERROR,RECLEN,FREC INTEGER*2 IFOO,MASK,I2AND2,L2NOT,MASK2,SMASK,CMASK,GETSR,ISR,OSR,ITORF2 INTEGER*2 DATA1,DATA2,FWPEEK,DATAS(2),MASK3,MS,BUF(3),TYP(3),ICHS(3)

INTEGER*2 A128(0:262144),ASC,SCAN,KBF1,KBF2,ERR,OPNUM,TYPS(32),LENXS(32) INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,I2,H6000,HD000,LAST4(4),LENYS(32) INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0,ASCAN(7000),SCNQL N INTEGER*2 PROFIL(0:16383),CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP,FNRNSN(32) INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP LOGICAL*4 AUTFRM,HALF,HELPF,GTFM,DOSCAN,ISDBON,EXISTS LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY LOGICAL*4 SKIP1L,FILEXS,NOT14,KILLIT,NOISE,REPEAT,BIGGER LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ,ISGOIN,NRMASK LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN LOGICAL*2 ABORT,ESCAPE,INTRPT,FLURB,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,ISOU,LINESY,MAXO,MAX00,AUTMED,AUTMEN LOGICAL*2 BUFGUD(32),BUFUSE(32),PAUSES,CATHV2,FRCV2N,FRCV2F,LTORF2 LOGICAL*2 DOSTAK,DOMEM,IFLOAT,HELP,DOALL,RUNING,OV2N,OV2F LOGICAL*2 TEK468,TK7854,TK7D20,AUTSCO,NRMFX0 LOGICAL*1 FLAG77(0:24),ISGONG,ISIT,DBISON,CBLNRM,CBLINV LOGICAL*1 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 (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)),(LENTR,LLENTR) EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC),(LENFR,LLENFR),(NTR,NNTR) EQUIVALENCE (DATA,DATA1,DATAS(1)),(DATA2,DATAS(2)),(ITORF2,LTORF2) 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,/SMOOTH/AUTMED,AUTMEN COMMON /OMASCN/SCNQLN,ASCAN,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT COMMON /PSYNCH/LINESY,/PARAFM/AUTFRM,/PARAUT/GTFM,/MSKNRM/NRMASK COMMON /PARDBG/LOOPPT,LOOP2H,LOOP,LOOP2,/PARLS4/LAST4 COMMON /BLKCNV/MAGNIF,LLHILO,CONTRS,BRIGHT,/PARMX/MAXO,MAX00 COMMON /INDICS/DOSTAK,DOMEM,IFLOAT,LEVEL,OLEVEL,HELP,DOALL,RUNING COMMON /IPPENC/SKIP1L,NOISE,/PARB14/NOT14,KILLIT,/FX0NRM/NRMFX0 COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARCBL/CBLNRM,CBLINV COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/OMABFL/BUFGUD,BUFUSE COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NO READ,ONOFF, & DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,VLTCHG,TINCR, &FREC,RECLEN,TENCPI,SXTNCP,/SCOAUT/AUTSCO 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,/PAWS/PAUSES 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 /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR NSN COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP COMMON /NAMEPR/PROGNM,MAINLN,/SCTYPE/TEK468,TK7854,TK7D20 SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/FILES/,/OMAPAR/,/OMAPR2/,/FRAMNG/,/STRBES/ SAVE /BLKCNV/,/PSTAMS/,/TWOPAR/,/GEWRTN/,/IPPENC/,/PARB14/,/PARZQX/,/NAMEP R/

SAVE /PARSCN/,/OMASCN/,/BEGS/,/SPECI/,/OMADIT/,/OMANOW/,/PARCUM/,/ZEROS/ SAVE /AMPLS/,/XFRAME/,/OMABFR/,NFRAME,NDRIVE,/PARMX/,/OMACNT/,/OMABFL/ SAVE /INDICS/,/GARBAG/,/SCOAUT/,/SCTYPE/,/MSKNRM/,/FX0NRM/ SAVE /PAWS/,/PARLS4/,/PARCBL/,/SMOOTH/,/OMASAT/,ISTAT,ENDIS EXTERNAL GETSR,GETIVC,SETIVC,SUPERM,USERM,GETSSP,RSTSSP,JUMPTO,FRAMLN EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,MILLIS,KADDR EXTERNAL DTIME,ISGOIN,BLKDSP,BLKDS,CALL3,FSREA8,FSREA7,FSREA6,DELETE EXTERNAL DBADDR,DEBUGX,DEREF,SPOKE,SWPOKE,SLPOKE,SETSR,SETSR4,KILLFI EXTERNAL TRAP12,TRAP11,ISDBON,BUFSTA,CJMPTO,CHLMOD,CHLM0D,MODCHL EXTERNAL NSTMSK,NSTFX0 SAVE DATA NFRAME/-1/,NDRIVE/-1/,ENDIS/'DISABLED','ENABLED '/ H6000 = $6000 HD000 = $D000 IJ = GETSR() SNOW = IJ.GE.$2000 MASK = $3FFF MASK2 = $C000 MASK3 = $0C00 SMASK = $0003 CMASK = $0004 IJKL = IJKLI IKLI = IJKLI CALL SETPG0 1 CONTINUE IF (TC.EQ.'[') THEN FLAG77(IKLI) = .TRUE. MAXO = .TRUE. MAX00 = .FALSE. CALL GOTOXY(74,IKLI) PRINT *,'[O' GOTO 1011 ELSEIF (TC.EQ.']') THEN FLAG77(IKLI) = .TRUE. MAX00 = .TRUE. MAXO = .FALSE. CALL GOTOXY(74,IKLI) PRINT *,']0' GOTO 1011 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.61.OR.SCAN.EQ.62.OR.SCAN.EQ.361)) THEN * F3 CALL CRCLS CALL PARSTQ(ISTAT) PRINT *,' PAR STATUS INDICATOR = ',ISTAT,' ',PSTAT(ISTAT) IF (ISTAT.NE.0) CALL PARSTA(JSTAT) PRINT *,' ' PRINT *,' nominal NUMBER OF PIXELS/TRACK = ',IXLEN PRINT *,' nominal NUMBER OF TRACKS/FRAME = ',IYLEN PRINT *,'nominal NUMBER OF PIXELS/FRAME = ',IXLEN*IYLEN IF (ISTAT.EQ.0.OR.(ISTAT.GT.1.AND.JSTAT.EQ.0)) THEN PRINT *,' ' PRINT *,' PAR IS RUNNING A SCAN PATTERN ' CALL FRAMLN(A128(0),LENFR,LENTR,NTR) PRINT *,' ' PRINT *,' measured NUMBER OF PIXELS/TRACK = ',LENTR PRINT *,' computed NUMBER OF TRACKS/FRAME = ',NTR PRINT *,'measured NUMBER OF PIXELS/FRAME = ',LENFR WHSCAN = 4 IF (LENTR.EQ.500.AND.NTR.EQ.170) WHSCAN = 1 IF (LENTR.EQ.250.AND.NTR.EQ.170) WHSCAN = 2

ENDIF IF (AUTFRM) THEN IXLEN = LLENTR IYLEN = NNTR MODE2D = NNTR.GT.1 IIXLEN = IXLEN IIYLEN = IYLEN ENDIF JSCAN = SCAN IF (SCAN.NE.361) THEN CALL PAUSE(' ') IF (JSCAN.EQ.62) THEN * F4 5411 PRINT *,' NUMBER OF PIXELS/TRACK = ? (0-no change)' READ (*,'(BN,I5)',ERR=5411) I IF (I.GT.0) IXLEN = I IF (IXLEN.GT.512) IXLEN = 512 5412 PRINT *,' NUMBER OF TRACKS/FRAME = ? (0-no change)' READ (*,'(BN,I5)',ERR=5412) I IF (I.GT.0) IYLEN = I IF (IYLEN.GT.256) IYLEN = 256 MODE2D = (IYLEN.NE.1) WHSCAN = 4 IF (IXLEN.EQ.500.AND.IYLEN.EQ.170) WHSCAN = 1 IF (IXLEN.EQ.250.AND.IYLEN.EQ.170) WHSCAN = 2 NNTR = IYLEN LLENTR = IXLEN LLENFR = IYLEN*IXLEN ENDIF ENDIF IIYLEN = 1 IF (MODE2D) IIYLEN = IYLEN IIXLEN = IXLEN IYNUM = IYLEN IXNUM = IXLEN NOISE = .TRUE. QWERTY = .TRUE. GOTO 2 ELSEIF (TC.EQ.'Q'.OR.TC.EQ.'q') THEN IF (AFMTYP.LE.-3.OR.AFMTYP.GE.7) AFMTYP = TYPS(5) CALL CRCLS HEXARR(1) = HEXOF(APMAIN) HEXARR(2) = HEXOF(APZR) HEXARR(3) = HEXOF(APMX) HEXARR(4) = HEXOF(LNMAIN) HEXARR(5) = HEXOF(LNZR) HEXARR(6) = HEXOF(LNMX) PRINT *,' MAIN BUFFER @ $',HEXARR(1),' = ',APMAIN,' LENGTH IS $' & ,HEXARR(4),' = ',LNMAIN PRINT *,' ZERO BUFFER @ $',HEXARR(2),' = ',APZR,' LENGTH IS $' & ,HEXARR(5),' = ',LNZR PRINT *,' MAX. BUFFER @ $',HEXARR(3),' = ',APMX,' LENGTH IS $' & ,HEXARR(6),' = ',LNMX PRINT *,'MAX FRAME is of type: ',FRMTYP(AFMTYP),' PICPAG/GRPHPG =',PIC PAG,'/',GRPHPG PRINT *,' ' IISR = GETSR() SRHEX = HEXOF(IISR) ADDRDB = DBADDR() RESULT = HEXOF(ADDRDB)

DBISON = ISDBON() PRINT *,'CURRENT SR (Status Register) = $',SRHEX(5:8),' Debug is @ $' ,RESULT(3:8) PRINT *,' Debug return points are $',LOOPPT(3:8),' and ',LOOP2H(3:8) IF (DBISON) THEN PRINT *,' Debug is active, and will intercept TRAP errors.' ELSE PRINT *,' Debug is inactive, TRAP errors are not being intercepted .' ENDIF PRINT *,' ' PRINT *,'STATUS OF LOGICAL FLAGS: ' PRINT *,' DATA FRAME USAGE: ' PRINT *,' Display: ',PICTUR,' Hex output: ',HEXIT,' To disk: ',DATACQ IF (CBLNRM.AND.CBLINV) CBLNRM = .FALSE. IF (.NOT.(CBLNRM.OR.CBLINV)) CBLINV = .TRUE. IF (CBLINV.AND.AUTMED) THEN PRINT *,' DATA HANDLING: Input data taken as INVERTED, AUTO -SMOOTHED' ELSEIF (CBLINV.AND..NOT.AUTMED) THEN PRINT *,' DATA HANDLING: Input data taken as INVERTED' ELSEIF (AUTMED) THEN PRINT *,' DATA HANDLING: Input data taken as NORMAL, AUTO-S MOOTHED' ELSE PRINT *,' DATA HANDLING: Input data taken as NORMAL' ENDIF PRINT *,' Do Zero Corr: ',ZZCORR,' Do Normalization: ',AAC ORR, & ' USUAL Norm.: ',MAXO PRINT *,' Zero valid : ',ZVALID,' Max. buffer valid: ',AV ALID, & ' TYPE 0 Norm.: ',MAX00 PRINT *,' Skip 1st/last lines: ',SKIP1L,' Bit14 mask: ',K ILLIT, & * Masked RANGE: ',NRMASK CALL PAUSE(' MORE ...') PAUSES = .TRUE. CALL ISNTRP PAUSES = .FALSE. IF (SCAN.EQ.1.OR.ASC.EQ.14.OR.ABORT.OR.ESCAPE.OR.INTRPT) GOTO 2 CALL BUFSTA IF (SCAN.EQ.1.OR.ASC.EQ.14.OR.ABORT.OR.ESCAPE.OR.INTRPT) GOTO 2 CALL SLCSTA GOTO 2 ELSEIF (ASC.EQ.11.OR.(ASC.EQ.0.AND.SCAN.EQ.$25)) THEN IF (IJKLI.GT.20) CALL CRCLS PRINT *,' FILE TO DELETE? ' READ (*,'(A)') INPUTS CALL FNCHCK(INPUTS,' ',INPUT2) INQUIRE (FILE=INPUT2,EXIST=EXISTS) IF (EXISTS) THEN IF (ASC.EQ.11) THEN IJ = DELETE(INPUT2) ELSE IJ = KILLFI(INPUT2) ENDIF ENDIF '

IF (.NOT.EXISTS) THEN PRINT *,' THEY AIN''T NO SECH AMINAL AS: ',INPUT2 ELSEIF (IJ.NE.0) THEN PRINT *,' RETURN I/O ERROR STATUS = ',IJ ELSE PRINT *,' Have deleted ',INPUT2 ENDIF CALL WAIT(0.3) ELSEIF (TC.EQ.'D'.OR.TC.EQ.'d') THEN CALL CRCLS PRINT *,' ' PRINT *,' AUTO-SMOOTHING = ',AUTMED PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN AUTMED = .NOT. AUTMED ELSEIF (IJ.EQ.2) THEN AUTMED = .FALSE. ELSEIF (IJ.EQ.1) THEN AUTMED = .TRUE. ENDIF IF (AUTMED) THEN PRINT *,' ' PRINT *,' MEAN-SMOOTHING ALSO= ',AUTMEN PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN AUTMEN = .NOT. AUTMEN ELSEIF (IJ.EQ.2) THEN AUTMEN = .FALSE. ELSEIF (IJ.EQ.1) THEN AUTMEN = .TRUE. ENDIF ELSE AUTMEN = .FALSE. ENDIF IF (TEK468.OR.TK7854.OR.TK7D20) THEN PRINT *,' SCOPE READING: ' PRINT *,' AUTOMATIC WFM READ = ',AUTSCO PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN AUTSCO = .NOT. AUTSCO ELSEIF (IJ.EQ.2) THEN AUTSCO = .FALSE. ELSEIF (IJ.EQ.1) THEN AUTSCO = .TRUE. ENDIF

ELSE AUTSCO = .FALSE. ENDIF PRINT *,' ' IF (CBLNRM.AND.CBLINV) CBLNRM = .FALSE. IF (.NOT.(CBLNRM.OR.CBLINV)) CBLINV = .TRUE. PRINT *,'CBLNRM = ',CBLNRM PRINT *,'CBLINV = ',CBLINV PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set normal' PRINT *,' 2 = set inverse' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN CBLINV = CBLNRM CBLNRM = .NOT.CBLNRM ELSEIF (IJ.EQ.2) THEN CBLINV = .TRUE. CBLNRM = .FALSE. ELSEIF (IJ.EQ.1) THEN CBLINV = .FALSE. CBLNRM = .TRUE. ENDIF PRINT *,' RANGING FORM/MASKED OR NOT' PRINT *,' MASKING = ',NRMASK PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN NRMASK = .NOT. NRMASK ELSEIF (IJ.EQ.2) THEN NRMASK = .FALSE. ELSEIF (IJ.EQ.1) THEN NRMASK = .TRUE. ENDIF CALL NSTMSK(NRMASK) PRINT *,' RANGING FORM/FIX 0? OR NOT' PRINT *,' FIX 0 = ',NRMFX0 PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN NRMFX0 = .NOT. NRMFX0 ELSEIF (IJ.EQ.2) THEN NRMFX0 = .FALSE. ELSEIF (IJ.EQ.1) THEN NRMFX0 = .TRUE. ENDIF CALL NSTFX0(NRMFX0) GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$1F.AND.CTRL) THEN CATHV2 = LSH.OR.RSH CALL GOTOXY(0,IKLI)

9101

9102

9103

9191

PRINT *,' CATHode Voltage 2 is ',CATHV2,' for subsequent downloads' GOTO 1011 ELSEIF (ASC.EQ.19.OR.(ASC.EQ.0.AND.SCAN.EQ.$1F)) THEN FLAG77(IKLI) = .TRUE. CALL PARSTO CALL GOTOXY(74,IKLI) PRINT *,'S' GOTO 1011 ELSEIF (ASC.EQ.18) THEN FLAG77(IJKLI) = .TRUE. CALL PARRUN MODE2D = .FALSE. CALL GOTOXY(74,IJKLI) PRINT *,'r' GOTO 1011 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.$13.OR.(SCAN.EQ.68.AND.CAPS))) THEN FLAG77(IKLI) = .TRUE. CALL PARR2D MODE2D = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'R' GOTO 1011 ELSEIF (TC.EQ.'C'.OR.TC.EQ.'c'.AND.(INS.OR.CAPS.OR.NUML)) THEN CALL GRCLS GOTO 2 ELSEIF (TC.EQ.'C'.OR.TC.EQ.'c') THEN CALL CRCLS PRINT *,'LSTCHL = ',LSTCHL PRINT *,'NEW VALUE? (>0, <512 invalid=ignore)' READ (*,'(BN,I8)',ERR=9101) INEW IF (INEW.GT.0.AND.INEW.LT.512) LSTCHL = INEW PRINT *,'LSTCHL = ',LSTCHL CALL WAIT(1.0) GOTO 2 ELSEIF (TC.EQ.'T'.OR.TC.EQ.'t') THEN CALL CRCLS PRINT *,'LSTTRK = ',LSTTRK PRINT *,'NEW VALUE? (>0, <512 invalid=ignore)' READ (*,'(BN,I8)',ERR=9102) INEW IF (INEW.GT.0.AND.INEW.LT.512) LSTTRK = INEW PRINT *,'LSTTRK = ',LSTTRK CALL WAIT(1.0) GOTO 2 ELSEIF (TC.EQ.'S'.OR.TC.EQ.'s') THEN CALL CRCLS PRINT *,'SCNQLN = ',SCNQLN PRINT *,'NEW VALUE? (>1024; invalid=ignore)' READ (*,'(BN,I8)',ERR=9103) INEW IF (INEW.GT.1024) SCNQLN = INEW PRINT *,'SCNQLN = ',SCNQLN CALL WAIT(1.0) GOTO 2 ELSEIF (TC.EQ.'\') THEN CALL CRCLS PRINT *,' Tail ignore variable = ',IGNORE PRINT *,' New value? (>4; invalid=ignore)' READ (*,'(BN,I8)',ERR=9191) IGN2 IF (IGN2.GT.4) IGNORE = IGN2 PRINT *,' Tail ignore variable = ',IGNORE CALL WAIT(1.0)

GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.120) THEN FLAG77(IKLI) = .TRUE. IF (RSH.OR.LSH) THEN CALL REGRWV ELSEIF (CTRL) THEN CALL RSTPAR CALL REGRWV ELSE CALL RSTPAR ENDIF WHSCAN = 0 MODE2D = .FALSE. CALL GOTOXY(74,IKLI) PRINT *,'*' GOTO 1011 ELSEIF ( (ASC.EQ.0.AND.(SCAN.GE.123.AND.SCAN.LE.126)) .OR. (CTRL.AND. & ASC.EQ.0.AND.(SCAN.GE.123.AND.SCAN.LE.129).AND.(.NOT.(LSH.OR.RSH))) & ) THEN CALL CRCLS CALL RSTPAR MODE2D = .FALSE. 7753 CONTINUE IKNM = SCAN-119+48 FILNAM = 'SCAN'//CHAR(IKNM)//'.PAR' FLNM = 'SCAN'//CHAR(IKNM)//'.OUT' INQUIRE (FILE=FILNAM,EXIST=FILEXS) IF (.NOT.FILEXS) THEN INQUIRE (FILE=FLNM,EXIST=FILEXS) IF (FILEXS) FILNAM = FLNM ELSE FLNM = FILNAM ENDIF IKNM = SCAN-119 IF (.NOT.FILEXS) THEN IF (.NOT.(LSH.OR.RSH)) THEN IF (IKNM.EQ.4) THEN FILNAM = 'HSCAN128.PAR' FLNM = 'HSCAN128.OUT' ELSEIF (IKNM.EQ.5) THEN FILNAM = 'HSCAN102.PAR' FLNM = 'HSCAN102.OUT' ELSEIF (IKNM.EQ.6) THEN FILNAM = 'HSCAN85.PAR' FLNM = 'HSCAN85.OUT' ELSEIF (IKNM.EQ.7) THEN FILNAM = 'HSCAN73.PAR' FLNM = 'HSCAN73.OUT' ELSEIF (IKNM.EQ.8) THEN FILNAM = 'HSCAN64.PAR' FLNM = 'HSCAN64.OUT' ELSEIF (IKNM.EQ.9) THEN FILNAM = 'HSCAN56.PAR' FLNM = 'HSCAN56.OUT' ENDIF ELSE IF (IKNM.EQ.4) THEN FILNAM = 'SCAN128.PAR' FLNM = 'SCAN128.OUT' ELSEIF (IKNM.EQ.5) THEN

FILNAM = 'SCAN102.PAR' FLNM = 'SCAN102.OUT' ELSEIF (IKNM.EQ.6) THEN FILNAM = 'SCAN85.PAR' FLNM = 'SCAN85.OUT' ELSEIF (IKNM.EQ.7) THEN FILNAM = 'SCAN73.PAR' FLNM = 'SCAN73.OUT' ELSEIF (IKNM.EQ.8) THEN FILNAM = 'SCAN64.PAR' FLNM = 'SCAN64.OUT' ELSEIF (IKNM.EQ.9) THEN FILNAM = 'SCAN56.PAR' FLNM = 'SCAN56.OUT' ENDIF ENDIF ENDIF INQUIRE (FILE=FILNAM,EXIST=FILEXS) IF (.NOT.FILEXS) THEN INQUIRE (FILE=FLNM,EXIST=FILEXS) FILNAM = 'HSCAN.PAR' IF (FILEXS) FILNAM = FLNM ELSE FLNM = FILNAM ENDIF PRINT *,'LOADING PAR FROM ',FILNAM FLNM = FILNAM WHSCAN = 4 7755 CONTINUE CALL PRESCN IA128 = IA256 CALL LODPAR(FLNM) IXLEN = IXNUM IYLEN = IYNUM IF ((IXLEN.LE.0.OR.IYLEN.LE.0).AND.AUTFRM) THEN PRINT *,' DETERMINING FRAME DIMENSIONS ... ' CALL FRAMLN(A128,LENFR,LENTR,NTR) IXLEN = LENTR IYLEN = NTR MODE2D = (NTR.GT.1) PRINT *,' PIXELS/FRAME = ',LENFR PRINT *,' PIXELS/TRACK = ',LENTR PRINT *,' TRACKS/FRAME = ',NTR ENDIF IXNUM = IXLEN IYNUM = IYLEN MODE2D = NTR.GT.1 IIXLEN = IXLEN IIYLEN = IYLEN MAGNIF = 17 QWERTY = .TRUE. NOISE = .TRUE. IJKLI = 2 GOTO 2 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.130.OR.SCAN.EQ.128)) THEN CALL CRCLS PRINT *,' ' 6645 PRINT *,' Save scan to what FILE? (xxxxxxxx.PAR)' READ (*,'(A)',ERR=6645) FILNAM IF (FILNAM.EQ.' '.OR.FILNAM(1:1).EQ.CHAR(3)) GOTO 2

IF (CTRL) THEN CALL SVFSCN(FILNAM) ELSEIF (LSH.OR.RSH) THEN CALL SVESCN(FILNAM) ELSE CALL SAVSCN(FILNAM) ENDIF GOTO 2 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.127.OR.SCAN.EQ.129)) THEN WRITE (11,'(A)') 'Downloading ... ' IF (SCRL.OR.SCAN.EQ.129) THEN CALL REGRWV ELSEIF (RSH.OR.LSH) THEN CALL REGROO ELSEIF (CTRL) THEN CALL REGR00 ELSE CALL REGRUV ENDIF WRITE (11,'(A)') 'Downloading completed. ' CALL FRAMLN(A128,JJ,KK,LL) GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.131) THEN CALL SETPG0 CALL GRCLS HELP = .TRUE. CALL CALCQT PROGNM = 'PAROMA' GOTO 2 ELSEIF (ASC.EQ.7) THEN DATACQ = .TRUE. CALL LABELS NOISE = .TRUE. QWERTY = .TRUE. GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$24) THEN PICTUR = .FALSE. FLAG77(IKLI) = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'pc' GOTO 1011 ELSEIF (ASC.EQ.10.OR.TC.EQ.'J'.OR.TC.EQ.'j') THEN PICTUR = .TRUE. FLAG77(IKLI) = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'PC' IF (IJKLI.GE.23) GOTO 2 GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$22) THEN DATACQ = .FALSE. FLAG77(IKLI) = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'g' IF (IJKLI.GE.23) GOTO 2 GOTO 1011 ELSEIF (SCAN.GE.133) THEN II = PAKPDX(A128,IJKLI) IF (II.EQ.2) GOTO 2 IF (II.EQ.911) GOTO 911 IF (II.EQ.9999) GOTO 9999

GOTO 1000 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.108.OR.SCAN.EQ.$3F)) THEN ** MODIFY CHANNELS CALL CRCLS PRINT *,' ' 1426 PRINT *,' Resetting channel parameters' PRINT *,' What channel width? (in pixels: 1 .. 500)' READ (*,*,ERR=1426) IPXCHL IF (IPXCHL.LT.1.OR.IPXCHL.GT.500) GOTO 1426 1427 PRINT *,' What X0? (default = 0; range 0 .. 511) ' READ (*,*,ERR=1427) IX0 IF (IX0.LT.0.OR.IX0.GT.511) IX0 = 0 NUMCHL = 500/IPXCHL X0 = IX0 CALL MODCHL(X0,IPXCHL,NUMCHL) IF (THEX0.NE.X0) THEN THEX0 = X0 CALL RSETTR ENDIF CALL FLLSCN GOTO 2 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.88.OR.SCAN.EQ.98)) THEN ** MODIFY CHANNELS CALL CRCLS PRINT *,' ' 1526 PRINT *,' Resetting channel parameters' PRINT *,' What channel width? (in pixels: 1 .. 500)' READ (*,*,ERR=1526) IPXCHL IF (IPXCHL.LT.1.OR.IPXCHL.GT.500) GOTO 1526 1527 PRINT *,' What X0? (default = 0; range 0 .. 511) ' READ (*,*,ERR=1527) IX0 IF (IX0.LT.0.OR.IX0.GT.511) IX0 = 0 NUMCHL = 500/IPXCHL PRINT *,' Primary DWELL time is? (Default 0; 0 .. 7)' IDW1 = MENU(0,0,7) IF (IDW1.EQ.0) THEN PRINT *,' Secondary DWELL time is? (8=>Default 0; 0 .. 7)' IDW2 = MENU(8,0,8) IF (IDW2.EQ.8) IDW2 = 0 ELSE PRINT *,' Secondary DWELL time is? (8=>Default 1; 0 .. 7)' IDW2 = MENU(8,0,8) IF (IDW2.EQ.8) IDW2 = 1 ENDIF X0 = IX0 PRINT *,' BEGinning channel & ENDing channel to be scanned (0,0 for de faults)' READ (*,'(BN,I8)',ERR=1528) IBEG READ (*,'(BN,I8)',ERR=1528) IEND GOTO 1529 1528 CALL CHLMOD(X0,IPXCHL,NUMCHL,IDW1,IDW2) GOTO 1530 1529 CALL CHLM0D(X0,IPXCHL,NUMCHL,IDW1,IDW2,IBEG,IEND) 1530 IF (THEX0.NE.X0) THEN THEX0 = X0 CALL RSETTR ENDIF CALL FLLSCN GOTO 2 ELSEIF (TC.EQ.'x'.OR.TC.EQ.'X') THEN

CALL XYGOTO(0,4) PRINT *,' THE X0 = ',THEX0 PRINT *,' ' 8412 PRINT *,' New value? (Valid 0 .. 511; invalid -> no change)' READ (*,*,ERR=8412) IIX0 IF (IIX0.GE.0.AND.IIX0.LE.511) THEX0 = IIX0 CALL RSETTR CALL FLLSCN PRINT *,' ' PRINT *,' THE X0 = ',THEX0 ELSEIF (ASC.EQ.21) THEN FLAG77(IKLI) = .TRUE. KILLIT = .TRUE. CALL GOTOXY(76,IKLI) PRINT *,'K14' GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$16) THEN FLAG77(IKLI) = .TRUE. KILLIT = .FALSE. CALL GOTOXY(76,IKLI) PRINT *,'14k' GOTO 1011 ELSEIF (ASC.EQ.4) THEN FLAG77(IJKLI) = .TRUE. CALL GOTOXY(74,IJKLI) PRINT *,'=' DOSCAN = .TRUE. GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$26) THEN FLAG77(IJKLI) = .TRUE. CALL GOTOXY(74,IJKLI) PRINT *,'L' LINESY = .TRUE. GOTO 1011 ELSEIF (ASC.EQ.12) THEN FLAG77(IJKLI) = .TRUE. CALL GOTOXY(74,IJKLI) PRINT *,'l' LINESY = .FALSE. GOTO 1011 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.87.OR.SCAN.EQ.97)) THEN CALL CRCLS PRINT *,' ' PRINT *,' TOP TO BOTTOM SCAN (REVERSE USUAL DIRECTION)' 2556 PRINT *,' Resetting track height and spacing: ' PRINT *,' What track height? (valid: 1 .. 500; invalid->abort)' READ (*,*,ERR=2556) ITRKHT IF (ITRKHT.GT.500.OR.ITRKHT.LE.0) GOTO 2 2557 PRINT *,' What track to track spacing? (valid: ',ITRKHT,' .. 510; inva lid->abort)' READ (*,*,ERR=2557) ITRSPC IF (ITRSPC.LT.ITRKHT.OR.ITRSPC.GT.510) GOTO 2 CALL TRKMOD(ITRKHT,ITRSPC) CALL FLLSCN GOTO 2 ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.$3E.OR.SCAN.EQ.107)) THEN CALL CRCLS PRINT *,' ' 1556 PRINT *,' Resetting track height and spacing: ' PRINT *,' What track height? (valid: 1 .. 500; invalid->abort)'

READ (*,*,ERR=1556) ITRKHT IF (ITRKHT.GT.500.OR.ITRKHT.LE.0) GOTO 2 1557 PRINT *,' What track to track spacing? (valid: ',ITRKHT,' .. 510; inva lid->abort)' READ (*,*,ERR=1557) ITRSPC IF (ITRSPC.LT.ITRKHT.OR.ITRSPC.GT.510) GOTO 2 CALL MODTRK(ITRKHT,ITRSPC) CALL FLLSCN GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$20.AND.(.NOT.(LSH.OR.CTRL))) THEN DBYET = .FALSE. CALL CRCLS LOOP = GETBAK() LOOP2 = REENTR() PRINT *,' !D ... ' OSR = ISR ISR = GETSR() SNOW = ISR.GE.$2000 UTHEN = OSR.LT.$2000 IF (.NOT.DBYET) THEN CALL XYGOTO(0,17) PRINT *,' ' PRINT *,' ABOUT TO INVOKE DEBUG .... ' PRINT *,' ' PRINT *,'GETBAK -> $',LOOPPT,' REENTR -> $',LOOP2H PRINT *,' ' PRINT *,'To return from DEBUG w/error trapping active type: G',L OOPPT PRINT *,'TO ESCAPE FROM DEBUG BACK TO MAIN PROGRAM TYPE: E' DBYET = .TRUE. DBY2 = .FALSE. CALL DEBUG CALL BUSERF DBYET = .FALSE. DBY2 = .TRUE. GOTO 2 ELSEIF (SNOW) THEN WRITE (11,'(A)',ERR=1000) 'THANK YOU! (System Error Trapping is O N) ' WRITE (11,'(A)',ERR=1000) 'THANK YOU! (System Error Trapping is O N) ' GOTO 1000 ENDIF ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$20) THEN SNOW = .TRUE. UTHEN = .FALSE. CALL SUPERM GOTO 2 * ELSEIF (TC.EQ.'w'.OR.TC.EQ.'W'.OR.TC.EQ.'P'.OR.TC.EQ.'p'.OR.TC.EQ.'$') TH EN * CALL NUMLON * 9876 PRINT *,'INPUT? .' * CALL GOTOXY(8,IJKLI) * READ (*,'(A)',ERR=9876) INPUTS * INPUT2 = '$'//INPUTS * KKK = INTOF(INPUT2) * CALL GOTOXY(8,IJKLI) * PRINT *,' ',KKK,' .' * KKK = KKK*65537 * IF (SNOW) CALL WPOKE(SENDAT+2,KKK)

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

IF (.NOT.SNOW) THEN IF (RSH.OR.LSH) THEN CALL SWPOKE(SENDAT+2,KKK) ELSE CALL WSPOKE(SENDAT+2,KKK) ENDIF ELSE CALL WPOKE(SENDAT+2,KKK) ENDIF CALL NUMLOF GOTO 1011 ELSEIF (TC.EQ.'A'.OR.TC.EQ.'a') THEN FLAG77(IJKLI) = .TRUE. IF (SNOW) CALL WPOKE(SENDAT+2,0) IF (.NOT.SNOW) CALL WSPOKE(SENDAT+2,0) CALL GOTOXY(74,IJKLI) PRINT *,'a' GOTO 1011 ELSEIF (TC.EQ.'B'.OR.TC.EQ.'b') THEN FLAG77(IJKLI) = .TRUE. IF (SNOW) CALL WPOKE(SENDAT+2,0) IF (.NOT.SNOW) CALL WSPOKE(SENDAT+2,0) CALL GOTOXY(74,IJKLI) PRINT *,'b' GOTO 1011 ELSEIF (TC.EQ.'!'.AND.LSH.AND.RSH) THEN CALL WHICHS CALL OPEBUS IF (TEK468.OR.TK7854.OR.TK7D20) THEN PRINT *,' SCOPE READING: ' PRINT *,' AUTOMATIC WFM READ = ',AUTSCO PRINT *,' ' PRINT *,' 0 = NO CHANGE ' PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN AUTSCO = .NOT. AUTSCO ELSEIF (IJ.EQ.2) THEN AUTSCO = .FALSE. ELSEIF (IJ.EQ.1) THEN AUTSCO = .TRUE. ENDIF ELSE AUTSCO = .FALSE. ENDIF ELSEIF (TC.EQ.'!') THEN IF (LSH.AND.RSH) THEN CALL WHICHS CALL OPEBUS ELSE CALL INTSCO CALL HELLO ENDIF IF (TEK468.OR.TK7854.OR.TK7D20) THEN PRINT *,' SCOPE READING: ' PRINT *,' AUTOMATIC WFM READ = ',AUTSCO PRINT *,' ' PRINT *,' 0 = NO CHANGE '

PRINT *,' 1 = set ON' PRINT *,' 2 = set OFF' PRINT *,' 3 = toggle ' IJ = MENU(0,0,3) IF (IJ.EQ.3) THEN AUTSCO = .NOT. AUTSCO ELSEIF (IJ.EQ.2) THEN AUTSCO = .FALSE. ELSEIF (IJ.EQ.1) THEN AUTSCO = .TRUE. ENDIF ELSE AUTSCO = .FALSE. ENDIF IF ((.NOT.LSH).OR.(.NOT.RSH)) GOTO 2 ELSEIF (ASC.EQ.2.AND.SCAN.EQ.$30) THEN CALL WFMOPS GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$30) THEN CALL OCCAS GOTO 2 ELSEIF (TC.EQ.'B'.OR.TC.EQ.'b') THEN 2399 CALL LABELR IF (END) GOTO 2 CALL DOSCOP CALL CRUNCH CALL PRINT GOTO 2 ELSEIF (TC.EQ.'w'.OR.TC.EQ.'W') THEN CALL DOSCOP CALL CRUNCH GOTO 2 * ELSEIF (TC.EQ.'r'.OR.TC.EQ.'R') THEN * CALL DOSCOP * CALL CRUNCH * GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$31) THEN PRINT *,' NTRSCN ...' CALL NTRSCN ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$21.AND.CTRL) THEN CALL CLS OV2N = FRCV2N OV2F = FRCV2F LTORF2 = FRCV2N PRINT *,' Coercion of Cathode V2 ON is ',ENDIS(ITORF2) PRINT *,' NEW SETTING? (0=NO CHANGE, 1=on, 2=off, 3=toggle)' I = MENU(0,0,3) IF (I.EQ.1) THEN FRCV2N = .TRUE. ELSEIF (I.EQ.2) THEN FRCV2N = .FALSE. ELSEIF (I.EQ.3) THEN FRCV2N = .NOT.FRCV2N ENDIF IF (.NOT.FRCV2N) THEN LTORF2 = FRCV2F PRINT *,' Coercion of Cathode V2 OFF is ',ENDIS(ITORF2) PRINT *,' NEW SETTING? (0=NO CHANGE, 1=on, 2=off, 3=toggle)' I = MENU(0,0,3) IF (I.EQ.1) THEN

FRCV2F = .TRUE. ELSEIF (I.EQ.2) THEN FRCV2F = .FALSE. ELSEIF (I.EQ.3) THEN FRCV2F = .NOT.FRCV2F ENDIF ELSE FRCV2F = .FALSE. ENDIF IF (FRCV2F) FRCV2N = .FALSE. CATHV2 = (CATHV2.OR.FRCV2N) .AND. (.NOT.FRCV2F) IF ((.NOT.OV2F).AND.FRCV2F .OR. (.NOT.OV2N).AND.FRCV2N) THEN CALL FLLSCN CALL NTRSCN ENDIF GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$21) THEN PRINT *,' FLLSCN ...' CALL FLLSCN ELSEIF (TC.EQ.'I'.OR.TC.EQ.'i') THEN FLAG77(IKLI) = .TRUE. SKIP1L = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'IPP' GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$17) THEN FLAG77(IKLI) = .TRUE. SKIP1L = .FALSE. CALL GOTOXY(74,IKLI) PRINT *,'ipp' GOTO 1011 ELSEIF (ASC.EQ.9.OR.SCAN.EQ.$0F) THEN FLAG77(IKLI) = .TRUE. INTRPS = .NOT. (RSH.OR.LSH) CALL GOTOXY(74,IKLI) IF (INTRPS) THEN PRINT *,'I' ELSE PRINT *,'i' ENDIF GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.121) THEN CALL CRCLS CALL RSTPAR MODE2D = .FALSE. 7654 CONTINUE IFOOB = I2AND2(KBF1,SMASK) IFOOB2 = I2AND2(KBF1,CMASK) IA128 = IA256 IF (IFOOB.EQ.0.AND.IFOOB2.EQ.0) THEN PRINT *,'prepping SCAN 2D ...' CALL PRESCN CALL SCAN2 PRINT *,'SCAN 2D ...' NOISE = .TRUE. WHSCAN = 1 MODE2D = .TRUE. IXLEN = IXNUM IYLEN = IYNUM MAGNIF = 17

ELSEIF (IFOOB.LE.3.AND.IFOOB2.EQ.0) THEN PRINT *,'prepping ALTERNATE HALF SCAN 2D ...' CALL PRESCN CALL LODPAR('SCANA.PAR ') PRINT *,'alternate SCAN 2D ...' WHSCAN = 1 NOISE = .TRUE. MODE2D = .TRUE. IXLEN = IXNUM IYLEN = IYNUM MAGNIF = 17 ELSEIF (IFOOB2.EQ.4) THEN IF (IF0OB.LE.3.AND.IFOOB.GE.1) THEN PRINT *,'PREPPING ALTERNATE half SCAN 2D ...' CALL PRESCN CALL LODPAR('HSCANA.PAR') PRINT *,'ALTERNATE half SCAN 2D ...' ELSE PRINT *,'PREPPING half SCAN 2D ...' CALL PRESCN CALL HSCAN PRINT *,'half SCAN 2D ...' ENDIF NOISE = .TRUE. WHSCAN = 2 IXLEN = IXNUM IYLEN = IYNUM MODE2D = .TRUE. MAGNIF = 17 ENDIF IJKLI = 2 GOTO 2 * ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$23) THEN * HEXIT = .TRUE. * FLAG77(IKLI) = .TRUE. * CALL GOTOXY(74,IKLI) * PRINT *,'H' * GOTO 1011 * ELSEIF (ASC.EQ.8.OR.TC.EQ.'H'.OR.TC.EQ.'h') THEN * HEXIT = .FALSE. * FLAG77(IKLI) = .TRUE. * CALL GOTOXY(74,IKLI) * PRINT *,'h' * GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.122.AND.(.NOT.CTRL).AND.(LSH.OR.RSH)) THEN CALL CRCLS PRINT *,' ' 6745 PRINT *,' GET scan from what FILE? (xxxxxxxx.PAR)' READ (*,'(A)',ERR=6745) FILNAM IF (FILNAM.EQ.' '.OR.FILNAM(1:1).EQ.CHAR(3)) GOTO 2 CALL GETSCN(FILNAM) CALL NTRSCN ELSEIF (ASC.EQ.0.AND.SCAN.EQ.122) THEN CALL CRCLS CALL RSTPAR MODE2D = .FALSE. 7653 CONTINUE PRINT *,'WHAT FILE TO LOAD PAR FROM?' READ (*,'(A)',ERR=7653) FILNAM CALL FNCHCK(FILNAM,'PAR',FLNM)

INQUIRE (FILE=FLNM,EXIST=FILEXS) IF (.NOT.FILEXS) CALL FNCHCK(FILNAM,'OUT',FLNM) WHSCAN = 4 CALL PRESCN IA128 = IA256 CALL LODPAR(FLNM) IXLEN = IXNUM IYLEN = IYNUM IF ((IXLEN.LE.0.OR.IYLEN.LE.0).AND.AUTFRM) THEN PRINT *,' DETERMINING FRAME DIMENSIONS ... ' CALL FRAMLN(A128,LENFR,LENTR,NTR) IXLEN = LENTR IYLEN = NTR MODE2D = (NTR.GT.1) PRINT *,' PIXELS/FRAME = ',LENFR PRINT *,' PIXELS/TRACK = ',LENTR PRINT *,' TRACKS/FRAME = ',NTR ENDIF IXNUM = IXLEN IYNUM = IYLEN MODE2D = NTR.GT.1 IIXLEN = IXLEN IIYLEN = IYLEN MAGNIF = 17 QWERTY = .TRUE. NOISE = .TRUE. IJKLI = 2 GOTO 2 ELSEIF (ASC.EQ.0.AND.((SCAN.GE.94.AND.SCAN.LE.103).OR.(SCAN.GE.84.AND.SCAN .LE.113))) THEN II = FRAMES(A128,A128,A128) IF (II.EQ.911) GOTO 911 GOTO 2 * ELSEIF (ASC.EQ.1) THEN * IF (SNOW) THEN * CALL WPOKE(SENDAT,0) * ELSE * CALL SWPOKE(SENDAT,0) * ENDIF * FLAG77(IKLI) = .TRUE. * CALL GOTOXY(74,IKLI) * PRINT *,'A0' * GOTO 1011 * ELSEIF (ASC.EQ.2) THEN * IF (SNOW) THEN * CALL WPOKE(SENDAT+2,0) * ELSE * CALL SWPOKE(SENDAT+2,0) * ENDIF * FLAG77(IKLI) = .TRUE. * CALL GOTOXY(74,IKLI) * PRINT *,'B0' * GOTO 1011 * ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$1E) THEN * CALL TOGGLA * FLAG77(IKLI) = .TRUE. * CALL GOTOXY(74,IKLI) * PRINT *,'AT' * GOTO 1011 * ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$30) THEN

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

CALL TOGGLB FLAG77(IKLI) = .TRUE. CALL GOTOXY(74,IKLI) PRINT *,'BT' GOTO 1011 ELSEIF (ASC.EQ.6) THEN CALL CRCLS PRINT *,'CURRENT FILE FOR FRAME OUTPUT IS ',FRAME CALL GETFIL(FRAME2) IF (.NOT.(ABORT.OR.ESCAPE.OR.INTRPT.OR.FRAME2.EQ.' ')) THEN FRAME = FRAME2 IRCNUM = 1 ENDIF PRINT *,'(NEW) FILE FOR FRAME OUTPUT IS ',FRAME CALL WAIT(1.0) GOTO 2 ELSEIF (TC.EQ.'Z'.OR.TC.EQ.'z') THEN CALL CRCLS IF (CAPS.AND.NUML) THEN CALL NUMLON PRINT *,' How many to average? (1->2; 2->4; 3->8; 4->16; II = -MENU(3,-5,5) CALL OMAZGT(II) CALL NUMLOF CALL CAPLON ELSEIF (CAPS) THEN CALL OMAGTZ CALL CAPLON ELSEIF (NUML) THEN CALL NUMLON PRINT *,' How many to average? (1->2; 2->4; 3->8; 4->16; II = MENU(3,-5,5) CALL OMAZGT(II) CALL NUMLOF ELSEIF (INS) THEN CALL PARZGT ELSE CALL PARGTZ ENDIF GOTO 2 ELSEIF (TC.EQ.'M'.OR.TC.EQ.'m') THEN CALL CRCLS IF (CAPS.AND.NUML) THEN CALL NUMLON PRINT *,' How many to average? (1->2; 2->4; 3->8; 4->16; II = -MENU(3,-5,5) CALL OMAMGT(II) CALL NUMLOF CALL CAPLON ELSEIF (CAPS) THEN CALL OMAGTM CALL CAPLON ELSEIF (NUML) THEN CALL NUMLON PRINT *,' How many to average? (1->2; 2->4; 3->8; 4->16; II = MENU(3,-5,5) CALL OMAMGT(II) CALL NUMLOF ELSEIF (INS) THEN CALL PARMGT

5->32)'

5->32)'

5->32)'

5->32)'

ELSE CALL PARGTM ENDIF GOTO 2 ELSEIF (ASC.EQ.13.AND.SCAN.EQ.$32) THEN CALL GOTOXY(74,IJKLI) PRINT *,'MAX' LINESY = .TRUE. AACORR = .TRUE. GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$32) THEN CALL GOTOXY(74,IJKLI) PRINT *,'max' AACORR = .FALSE. GOTO 1011 ELSEIF (ASC.EQ.26) THEN CALL GOTOXY(74,IJKLI) PRINT *,'ZRC' LINESY = .TRUE. ZZCORR = .TRUE. GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$2C) THEN CALL GOTOXY(74,IJKLI) PRINT *,'zrc' ZZCORR = .FALSE. GOTO 1011 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$42) THEN ISIT = ISGOIN() .OR. DIDIT ERR = $10 ERR = I2AND2(KBF2,ERR) IF (ISIT.OR.(ERR.NE.0)) THEN II = 524288 IF (INS) CALL SETSR4($2700) IF (CBLNRM) THEN CALL FSREA8(A128,II) ELSE CALL FSREI8(A128,II) ENDIF IF (INS) CALL SETSR4($0000) ELSE II = 0 ENDIF WRITE (11,'(I9,'' BYTES IN THIS FRAME. EA8 '',L1)',ERR=1000) II,ISIT GOTO 1000 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$43) THEN ISIT = ISGOIN() .OR. DIDIT ERR = $10 ERR = I2AND2(KBF2,ERR) IF (ISIT.OR.(ERR.NE.0)) THEN II = 524288 IF (INS) CALL SETSR4($2700) IF (CBLNRM) THEN CALL FSREA7(A128,II) ELSE CALL FSREI7(A128,II) ENDIF IF (INS) CALL SETSR4($0000) ELSE II = 0 ENDIF

WRITE (11,'(I9,'' BYTES IN THIS FRAME. EA7 '',L1)',ERR=1000) II,ISIT GOTO 1000 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$44) THEN ISIT = ISGOIN() .OR. DIDIT ERR = $10 ERR = I2AND2(KBF2,ERR) IF (ISIT.OR.(ERR.NE.0)) THEN II = 524288 IF (INS) CALL SETSR4($2700) IF (CBLNRM) THEN CALL FSREA6(A128,II) ELSE CALL FSREI6(A128,II) ENDIF IF (INS) CALL SETSR4($0000) ELSE II = 0 ENDIF WRITE (11,'(I9,'' BYTES IN THIS FRAME. EA6 '',L1)',ERR=1000) II,ISIT GOTO 1000 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.59) THEN NOREAD = .TRUE. PAROMA = .FALSE. PADS = ' !!' ELSEIF (((TC.EQ.'E'.OR.TC.EQ.'e').AND.(INS.OR.NUML.OR.CAPS)).OR. & (ASC.EQ.0.AND.SCAN.EQ.$12.AND.(CTRL.OR.INS.OR.CAPS.OR.NUML))) THEN CALL CRCLS PRINT *,' ARE YOU SURE YOU WANT TO RE-INITIALIZE ALL? (y/N)' IJ = MENU(0,0,1) IF (IJ.EQ.1) CALL CJMPTO($0E000) GOTO 2 ELSEIF ((TC.EQ.'H'.OR.TC.EQ.'h').AND.(INS.OR.CAPS.OR.NUML)) THEN CALL CRCLS PRINT *,' ' PRINT *,' Hacking ... , S for SUPERM; U for USERM; Z for Set SR' I = GETSR() RESULT = HEXOF(I) PRINT *,' Current SR = $',RESULT(5:8) TSET = DTIME() 9292 CALL ISNTRP IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 2 TIME = DTIME() IF ((TIME-TSET).GT.10.0) GOTO 2 IF (ERR.NE.0) GOTO 9292 IF (TC.EQ.'S'.OR.TC.EQ.'s') THEN CALL SUPERM ELSEIF (TC.EQ.'u'.OR.TC.EQ.'U') THEN CALL USERM ELSEIF (TC.EQ.'c'.OR.TC.EQ.'C') THEN CALL TRAP12 ELSEIF (TC.EQ.'b'.OR.TC.EQ.'B') THEN CALL TRAP11 ELSEIF (TC.EQ.'Z'.OR.TC.EQ.'z') THEN PRINT *,' NEW SR = ? (hex)' READ (*,'(A)') FILNAM FRAME2 = '$'//FILNAM NEWSR4 = INTOF(FRAME2) CALL SETSR4(NEWSR4) ENDIF I = GETSR()

RESULT = HEXOF(I) PRINT *,' SR = $',RESULT(5:8) CALL WAIT(1.5) GOTO 2 ELSEIF (ASC.GE.$30.AND.ASC.LT.$38) THEN TIME4 = ASC - $30 IF (TIME4.EQ.0) TIME4 = 1 CALL TICHNL(TIME4) PRINT *,' TIME = ',TIME4,' * 20 microSECONDS ' ZVALID = .FALSE. IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (TC.EQ.'`') THEN CALL SLCOPS GOTO 2 * ELSEIF (TC.EQ.'{') THEN * CALL CRCLS * 7778 PRINT *,'STORE displayed frame as (0, 1-999; xxxyyy)? [INVALID TO ABO RT]' * IF (NFRAME.LE.0) NFRAME = 1 * PRINT *,' 0 => ',NFRAME + 1,' xxxyyy -> RUN xxx, SHOT yyy' ** READ (*,'(BN,I8)',ERR=7778) I * I = GETINT() * IF (I.EQ.0) I = NFRAME + 1 * IF (I.GT.999999.OR.I.LT.-999999) GOTO 9000 * IF (I.GE.0) THEN * PRINT *,'STORE TO WHICH DRIVE? (-1, 0 .. 8) ' * IDR = MENU(0,-1,9) * IF (NDRIVE.LT.0.OR.NDRIVE.GT.8) NDRIVE = -1 * IF (ASC.EQ.13.AND.IDR.EQ.0) IDR = NDRIVE * J = I * CALL STAFRM(IT,LLX,LLY,TYPFRM,I,IDR) * IF (I.GT.0) THEN * PRINT *,' FRAME STORED SUCCESSFULLY ' * NDRIVE = IDR * NFRAME = J * FNRNSN(DEFBUF) = J * ELSE * PRINT *,' ERROR CODE = ',I * ENDIF * CALL WAIT(1.5) * ENDIF * ELSEIF (TC.EQ.'"') THEN * CALL CRCLS * 7740 PRINT *,'STORE displayed frame as (0, 1-999; xxxyyy)? [INVALID TO ABO RT]' * IF (NFRAME.LE.0) NFRAME = 1 * PRINT *,' 0 => ',NFRAME + 1,' xxxyyy -> RUN xxx, SHOT yyy' ** READ (*,'(BN,I8)',ERR=7740) I * I = GETINT() * IF (I.EQ.0) I = NFRAME + 1 * IF (I.GT.999999.OR.I.LT.-999999) GOTO 9000 * IF (I.GE.0) THEN * PRINT *,'STORE TO WHICH DRIVE? (-1, 0 .. 8) ' * IDR = MENU(0,-1,9) * IF (NDRIVE.LT.0.OR.NDRIVE.GT.8) NDRIVE = -1 * IF (ASC.EQ.13.AND.IDR.EQ.0) IDR = NDRIVE * J = I * CALL ST0FRM(IT,LLX,LLY,TYPFRM,I,IDR) * IF (I.GT.0) THEN

* * * * * * * * *

PRINT *,' FRAME STORED SUCCESSFULLY ' NDRIVE = IDR NFRAME = J FNRNSN(DEFBUF) = J

ELSE PRINT *,' ERROR CODE = ',I ENDIF CALL WAIT(1.5) ENDIF ELSEIF (ESCAPE.OR.INTRPT) THEN GOTO 2 ELSE PRINT *,'What is ',TC,' from ',ASC,' ',TCALGN,' ',SCAN ENDIF GOTO 1000 1011 CONTINUE IJKLI = IJKLI + 1 1000 CONTINUE PACONT = 0 1001 CONTINUE ERR = -1 ASC = 0 SCAN = 0 RETURN 2 CONTINUE MAINLN = 'PAR/OMA Data Acquisition & Analysis Program .' PROGNM = 'TSTPAR' CALL GRCLS PACONT = 2 NOISE = .TRUE. QWERTY = .TRUE. GOTO 1001 911 CONTINUE PACONT = 911 RETURN 9999 CONTINUE PACONT = 9999 RETURN 7898 FORMAT (I8,' BYTES REPORTED BY ASM SUBROUTINE.') 9878 FORMAT (BN,I8.0) 8001 FORMAT(A,I2.2,A,A,A,I6,A,A,2X,L1,L1) END *---------------------------------------------------------------------$SEGMENT MTSTSUB2 INTEGER*4 FUNCTION APORCP(BUF,REFBUF,LX,LY) INTEGER*2 BUF(LX,LY),REFBUF(LX,LY),RESULT REAL*8 SUM INTEGER*4 CUMUL(0:16383),IGNORE,IGNOR,MODE,PRPDUN,LOWCUT,IHICUT INTEGER*4 COUNT,L0WCUT,IH1CUT INTEGER*2 BIG,SMALL,RANGE,BIG2,SMALL2,I16384,PROFIL(0:16383) INTEGER*2 PATH1X,PATH1Y,PATH2X,PATH2Y,PATH3X,PATH3Y INTEGER*2 PATH(2,5),PATH4X,PATH4Y,PATH5X,PATH5Y INTEGER*2 I1XUL,I1XUR,I1XLL,I1XLR,I1YUL,I1YUR,I1YLL,I1YLR LOGICAL*2 PTHDUN LOGICAL*1 DIDIT EQUIVALENCE (PATH(1,1),PATH1X),(PATH(2,1),PATH1Y) EQUIVALENCE (PATH(1,2),PATH2X),(PATH(2,2),PATH2Y) EQUIVALENCE (PATH(1,3),PATH3X),(PATH(2,3),PATH3Y) EQUIVALENCE (PATH(1,4),PATH4X),(PATH(2,4),PATH4Y) EQUIVALENCE (PATH(1,5),PATH5X),(PATH(2,5),PATH5Y)

COMMON /PARNML/BIG,SMALL,RANGE,/PARNM2/BIG2,SMALL2,MODE,I16384 COMMON /PARCUM/IGNOR,PROFIL,CUMUL,/MGPATH/PATH,PTHDUN COMMON /PTHALT/I1XUL,I1XUR,I1XLL,I1XLR,I1YUL,I1YUR,I1YLL,I1YLR COMMON /I2ENML/LOWCUT,IHICUT,/GLOBAL/L0WCUT,IH1CUT SAVE /PARCUM/,/PARNML/,/PARNM2/,/MGPATH/,/I2ENML/,/PTHALT/,/GLOBAL/ SAVE DIDIT EXTERNAL PRPDUN,PRPCNV SAVE * * AUTOMATIC POLARIZATION DETERMINATION GOES HERE * ALIGNED = 1 / CROSSED = -1 / CAN'T TELL = 0 * DIDIT = .FALSE. RESULT = 0 9000 CONTINUE I = PRPDUN() IF (I.LE.1.AND.(.NOT.PTHDUN)) THEN * PRPDUN == 0 means that conversion preparation has not been done, so we cannot * tell (readily) whether the frame is aligned or crossed; TRY PREP ... CALL XYGOTO(0,7) PRINT *,'APORCP: PRPDUN = ',I,' PTHDUN = ',PTHDUN,' DIDIT = ',DIDIT IF (.NOT.DIDIT) THEN DIDIT = .TRUE. CALL PRPCNV GOTO 9000 ENDIF * WE TRIED IT AND IT FAILED RESULT = 0 ELSE * if PRPDUN is non-zero then preparation has been done and the path beginning is * known. The values at the path beginning should be high for an aligned frame * and low for a crossed frame IF (BUF(PATH1X,PATH1Y).GE.IHICUT) THEN RESULT = 1 ELSEIF (BUF(PATH1X,PATH1Y).LE.LOWCUT) THEN RESULT = -1 ELSEIF (BUF(PATH1X,PATH1Y).GE.IH1CUT) THEN RESULT = 1 ELSEIF (BUF(PATH1X,PATH1Y).LE.L0WCUT) THEN RESULT = -1 ELSEIF (BUF(PATH2X,PATH2Y).GE.IHICUT) THEN RESULT = 1 ELSEIF (BUF(PATH2X,PATH2Y).LE.LOWCUT) THEN RESULT = -1 ELSEIF (BUF(PATH2X,PATH2Y).GE.IH1CUT) THEN RESULT = 1 ELSEIF (BUF(PATH2X,PATH2Y).LE.L0WCUT) THEN RESULT = -1 ELSE * Can't tell (unequivocably) from path beginning, so we try majority of frame * with (relaxed) path beginning test ... COUNT = 0 SUM = 0.0 DO 1 K = 1,LX DO 2 J = 1,LY IF (REFBUF(K,J).NE.0) THEN COUNT = COUNT + 1 SUM = SUM + 2.0D0*BUF(K,J)/REFBUF(K,J) ENDIF 2 CONTINUE

* *

* *

CONTINUE SUM = SUM/COUNT IF (SUM.GT.0.5D0) THEN IF (BUF(PATH1X,PATH1Y).GT.((IHICUT+LOWCUT)/2)) THEN BOTH INDICATORS SAY ALIGNED, SO BE IT! RESULT = 1 ELSE MIXED SIGNALS ... RESULT = 0 ENDIF ELSE IF (BUF(PATH1X,PATH1Y).LT.((IHICUT+LOWCUT)/2)) THEN BOTH INDICATORS SAY CROSSED, SO BE IT! RESULT = -1 ELSE MIXED SIGNALS ... RESULT = 0 ENDIF ENDIF ENDIF ENDIF

* * ONE MORE TEST before asking, check alternate path beginnings ... * IF (RESULT.EQ.0.AND.(PTHDUN.OR.I.GE.3)) THEN IF (I1XUL.NE.-1.AND.I1YUL.NE.-1) THEN IF (BUF(I1XUL,I1YUL).GT.IHICUT) THEN RESULT = RESULT + 3 ELSEIF (BUF(I1XUL,I1YUL).LT.LOWCUT) THEN RESULT = RESULT - 3 ENDIF IF (BUF(I1XUL,I1YUL).GT.((IHICUT+LOWCUT)/2)) THEN RESULT = RESULT + 1 ELSE RESULT = RESULT - 1 ENDIF ENDIF IF (I1XUR.NE.-1.AND.I1YUR.NE.-1) THEN IF (BUF(I1XUR,I1YUR).GT.IHICUT) THEN RESULT = RESULT + 3 ELSEIF (BUF(I1XUR,I1YUR).LT.LOWCUT) THEN RESULT = RESULT - 3 ENDIF IF (BUF(I1XUR,I1YUR).GT.((IHICUT+LOWCUT)/2)) THEN RESULT = RESULT + 1 ELSE RESULT = RESULT - 1 ENDIF ENDIF IF (I1XLR.NE.-1.AND.I1YLR.NE.-1) THEN IF (BUF(I1XLR,I1YLR).GT.IHICUT) THEN RESULT = RESULT + 3 ELSEIF (BUF(I1XLR,I1YLR).LT.LOWCUT) THEN RESULT = RESULT - 3 ENDIF IF (BUF(I1XLR,I1YLR).GT.((IHICUT+LOWCUT)/2)) THEN RESULT = RESULT + 1 ELSE RESULT = RESULT - 1 ENDIF

ENDIF IF (I1XLL.NE.-1.AND.I1YLL.NE.-1) THEN IF (BUF(I1XLL,I1YLL).GT.IHICUT) THEN RESULT = RESULT + 3 ELSEIF (BUF(I1XLL,I1YLL).LT.LOWCUT) THEN RESULT = RESULT - 3 ENDIF IF (BUF(I1XLL,I1YLL).GT.((IHICUT+LOWCUT)/2)) THEN RESULT = RESULT + 1 ELSE RESULT = RESULT - 1 ENDIF ENDIF IF (RESULT.LT.0) RESULT = -1 IF (RESULT.GT.0) RESULT = 1 ENDIF * * IF CAN'T TELL AUTOMATICALLY - ASK! IF (RESULT.EQ.0) THEN CALL GOTOXY(0,17) PRINT *,'Is this frame ALIGNED (1/Y) or crossed (0/n) polarization?' I = MENU(1,0,1) APORCP = 2*I - 1 ELSE APORCP = RESULT ENDIF RETURN END *---------------------------------------------------------------------$SEGMENT SLICE_OP SUBROUTINE SLCOPS CHARACTER*8 HAPS(32),OPMESS*60 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),R500(16384) REAL*4 D170(170,120),D20480(20480) INTEGER*4 IAPS(32),LENS(32),NUMOPS,IOP,ICH,IBUF,IX,IY,ISTART,ARCHTP(4) INTEGER*4 ISBUF,J,ICH2,ICH3,ICH1,IIWHOP,IIICH,I INTEGER*2 TAGS(80,4),FRAMTG(80),TYPTAG(80),WHERTG(80),NPNTAG(80) INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,ICHS(80),LENXS(32) INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,TYPS(32),LENYS(32),FNRNSN(32) LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,CONFRM LOGICAL*2 AUTOEX,NUM,CAP EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) 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 (R500(1),D256L(1,1),D128L(1,1),D75L(1,1),D64L(1,1),D50L(1,1)) EQUIVALENCE (R500(1),PR256L(1,1,1),PR128L(1,1,1),PR75L(1,1,1),PR64L(1,1,1) ,PR50L(1,1,1)) EQUIVALENCE (TAGS(1,1),FRAMTG(1)),(TAGS(1,2),TYPTAG(1)),(TAGS(1,3),WHERTG( 1)) EQUIVALENCE (TAGS(1,4),NPNTAG(1)) COMMON /OMATYP/TYPS,LENXS,LENYS,FNRNSN,/OMACNT/IAPS,HAPS,LENS COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/CNFRM/CONFRM COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR COMMON /PARPLZ/R500,/WFMOUT/DATA,/WFMTAG/TAGS

SAVE /WFMOUT/,/PARPLZ/,/WFMTAG/,/OMATYP/,/OMACNT/,/CNFRM/ SAVE /SHFSTA/,/KEYGET/,/NTRVN/ SAVE CONFRM = .FALSE. AUTOEX = .FALSE. 3552 CONTINUE IF (AUTOEX) RETURN IWHOP = KTEST3(-1,0,25) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 1010 IF (IWHOP.GT.0) GOTO 3559 CALL CLS PRINT *,' Operations menu for 1-d extractions from frames. Which SLICE OP? ' PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT ES' PRINT *,' 15) LIST ALL COMPATIBLE SLICES ' PRINT *,' 17) EXTRACT ALL COMP. AVERAGE ' PRINT *,' 19) EXTRACT ALL COMP. MEDIAN3 ' PRINT *,' 21) EXTRACT ALL COMP. MEDIAN5 PRINT *,' 23) ERASE SEQUENTIAL GROUP PRINT *,' 25) EXTRACT ALL COMP. MEDIAN LICE' IWHOP = KTEST3(-1,0,26) IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.IWHOP.EQ.6) GOTO 2 IF (IWHOP.GT.0) GOTO 3559 CONFRM = .TRUE. IWHOP = LMENU(4,0,26) ERR = -1 3559 CONTINUE CALL SHIFTS NUM = NUML CAP = CAPS IF (IWHOP.EQ.6.OR.INTRPT.OR.ESCAPE.OR.ABORT) THEN GOTO 2 ELSEIF (IWHOP.EQ.1) THEN NUMOPS = 2 OPMESS = ' COPY SLICE TO SLICE' ELSEIF (IWHOP.EQ.2) THEN NUMOPS = 1 OPMESS = ' EXTRACT SLICE FROM FRAME ' ELSEIF (IWHOP.EQ.3) THEN NUMOPS = -1 OPMESS = ' PLOT MULTIPLE SLICES ' ELSEIF (IWHOP.EQ.4) THEN NUMOPS = 1 OPMESS = ' PLOT A SLICE' ELSEIF (IWHOP.EQ.5) THEN CALL GOTOXY(0,0) CALL CLS WRITE (*,'('' #'',2X,''FRAME #'',2X,''TYP'',2X,''LOC '',2X,''PNTS'')') 22) COPY SEQUENTIAL GROUP ' 24) EXTRACT MULTIPLE MEDIAN' 26) SCATTERPLOT SLICE VS. S 20) EXTRACT MULTIPLE MEDIAN5 18) EXTRACT MULTIPLE MEDIAN3 16) EXTRACT MULTIPLE AVERAGE *,' ' *,' 1) COPY SLICE TO SLICE 2) EXTRACT SLICE ' *,' 4) PLOT SLICE <== DEFAULT 3) PLOT MULTIPLE SLICES' *,' 5) DISPLAY SLICES STATUS 6) EXIT ' *,' 7) SUBTRACT SLICES 8) SUBTRACT SLICES W/FLOOR' *,' 9) LIST SLICES TO FILE 10) CHOOSE PLOT FORMAT ' *,' 11) EXTRACT MULTIPLE SLICES 12) EXTRACT Y SLICE ' *,' 13) EXTRACT ALL COMPATIBLE SLICES 14) PLOT ALL COMPATIBLE SLIC

DO 1 I = 1,80 IF (FRAMTG(I).GT.0) THEN WRITE (*,'(I2.2,2X,I7.7,2X,I3.3,2X,I4.4,2X,I4.4,2X)') & I,FRAMTG(I),TYPTAG(I),WHERTG(I),NPNTAG(I) ELSE WRITE (*,'(I2.2,2X,I7.6,2X,I3.3,2X,I4.4,2X,I4.4,2X)') & I,FRAMTG(I),TYPTAG(I),WHERTG(I),NPNTAG(I) ENDIF IF (MOD(I,20).EQ.0) THEN PRINT *,' ' PRINT *,'HIT ANY KEY TO CONTINUE' 8900 CALL ISNTRP IF (IERR.NE.0) GOTO 8900 IF (ESCAPE.OR.INTRPT.OR.SCAN.EQ.1) GOTO 3552 IF (ABORT) GOTO 2 CALL GOTOXY(0,0) CALL CLS IF (I.EQ.80) GOTO 3552 WRITE (*, & '('' #'',2X,''FRAME #'',2X,''TYP'',2X,''LOC '',2X,''PNTS'')') ENDIF 1 CONTINUE ELSEIF (IWHOP.EQ.7) THEN NUMOPS = 3 OPMESS = ' SUBTRACT SLICES (SIGNED) ' ELSEIF (IWHOP.EQ.8) THEN NUMOPS = 3 OPMESS = ' SUBTRACT SLICES W/ FLOOR ' ELSEIF (IWHOP.EQ.9) THEN NUMOPS = -1 OPMESS = ' LIST MULTIPLE SLICES ' ELSEIF (IWHOP.EQ.10) THEN CALL SPLSLC GOTO 3552 ELSEIF (IWHOP.EQ.11) THEN NUMOPS = 1 OPMESS = ' EXTRACT MULTIPLE SLICES FROM FRAMES ' ELSEIF (IWHOP.EQ.12) THEN NUMOPS = 1 OPMESS = ' EXTRACT Y-SLICE FROM FRAME ' ELSEIF (IWHOP.EQ.13) THEN NUMOPS = 1 OPMESS = ' EXTRACT SLICES FROM ALL COMPATIBLE FRAMES ' ELSEIF (IWHOP.EQ.14) THEN NUMOPS = 1 OPMESS = ' PLOT ALL COMPATIBLE SLICES ' ELSEIF (IWHOP.EQ.15) THEN NUMOPS = 1 OPMESS = ' LIST ALL COMPATIBLE SLICES ' ELSEIF (IWHOP.EQ.16) THEN NUMOPS = 1 OPMESS = ' EXTRACT MULTIPLE AVERAGE SLICES FROM FRAMES ' ELSEIF (IWHOP.EQ.17) THEN NUMOPS = 1 OPMESS = ' EXTRACT AVERAGE SLICES FROM ALL COMPATIBLE FRAMES ' ELSEIF (IWHOP.EQ.18) THEN NUMOPS = 1 OPMESS = ' EXTRACT MULTIPLE MEDIAN (3) SLICES FROM FRAMES ' ELSEIF (IWHOP.EQ.19) THEN NUMOPS = 1

OPMESS = ' EXTRACT MEDIAN (3) SLICES FROM ALL COMPATIBLE FRAMES ' ELSEIF (IWHOP.EQ.20) THEN NUMOPS = 1 OPMESS = ' EXTRACT MULTIPLE MEDIAN (5) SLICES FROM FRAMES ' ELSEIF (IWHOP.EQ.21) THEN NUMOPS = 1 OPMESS = ' EXTRACT MEDIAN (5) SLICES FROM ALL COMPATIBLE FRAMES ' ELSEIF (IWHOP.EQ.22) THEN NUMOPS = 2 OPMESS = 'COPY SEQUENTIAL GROUP OF SLICES ' ELSEIF (IWHOP.EQ.23) THEN NUMOPS = 2 OPMESS = 'ERASE SEQUENTIAL GROUP OF SLICES ' ELSEIF (IWHOP.EQ.24) THEN NUMOPS = 1 OPMESS = ' EXTRACT MULTIPLE MEDIAN SLICES FROM FRAMES ' ELSEIF (IWHOP.EQ.25) THEN NUMOPS = 1 OPMESS = ' EXTRACT MEDIAN SLICES FROM ALL COMPATIBLE FRAMES ' ELSEIF (IWHOP.EQ.26) THEN NUMOPS = 2 OPMESS = ' SCATTERPLOT SLICE AGAINST SLICE ' ENDIF IOP = 1 IF (NUMOPS.EQ.0) GOTO 8002 8000 CONTINUE CALL XYGOTO (0,4) PRINT *,OPMESS PRINT *,' ' 8001 CONTINUE IF (NUMOPS.LT.0) THEN PRINT *,'CHOOSE SLICE operand #',IOP,' (1..80, 81= REDO, 82=END)' ELSE PRINT *,'CHOOSE SLICE operand #',IOP,' (1..80, 81= REDO)' ENDIF CONFRM = .TRUE. IF (NUMOPS.LT.0) THEN ICH = MENU(1,0,82) ELSE ICH = MENU(1,0,81) ENDIF 8003 CONTINUE IF (ICH.EQ.82) THEN IOP = IOP - 1 IF (IOP.EQ.0) GOTO 3552 GOTO 8002 ELSEIF (ICH.EQ.81) THEN IOP = IOP -1 IF (IOP.GT.0) GOTO 8001 GOTO 3552 ELSEIF (IOP.EQ.1) THEN ICH1 = ICH ELSEIF (IOP.EQ.2) THEN ICH2 = ICH ELSEIF (IOP.EQ.3) THEN ICH3 = ICH ENDIF ICHS(IOP) = ICH IOP = IOP + 1 IF (NUMOPS.LT.0) GOTO 8001

8002

* * 8100

8101

* * * * * * 8122 8120

8121

IF (IOP.GE.(NUMOPS+1)) GOTO 8002 GOTO 8001 CONTINUE NUML = NUML .OR. NUM CAPS = CAPS .OR. CAP IF (IWHOP.EQ.1) THEN OPMESS = ' COPY SLICE TO SLICE' CALL CPYSLC(ICH1,ICH2) ELSEIF (IWHOP.EQ.2) THEN OPMESS = ' EXTRACT SLICE FROM FRAME' PRINT *,'From which buffer? ' IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8100 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8100 PRINT *,' ' PRINT *,'Which position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8101) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8101 ENDIF CALL XTRACT(IBUF,IY,ICH) ELSEIF (IWHOP.EQ.3) THEN OPMESS = ' PLOT MULTIPLE SLICES ' CALL PLTSLS(ICHS(1),IOP) ELSEIF (IWHOP.EQ.4) THEN OPMESS = ' PLOT A SLICE' CALL PLTSLC(ICH) ELSEIF (IWHOP.EQ.7) THEN OPMESS = ' SUBTRACT SLICES (SIGNED) ' CALL SUBSLC(ICH1,ICH2,ICH3) ELSEIF (IWHOP.EQ.8) THEN OPMESS = ' SUBTRACT SLICES W/ FLOOR ' CALL SZBSLC(ICH1,ICH2,ICH3) ELSEIF (IWHOP.EQ.9) THEN OPMESS = ' LIST MULTIPLE SLICES ' CALL LSTSLS(ICHS(1),IOP) ELSEIF (IWHOP.EQ.11) THEN OPMESS = ' EXTRACT MULTIPLE SLICES FROM FRAMES ' PRINT *,'FOR SLICE #',ICH PRINT *,'From which buffer? ' IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8120 IF (IBUF.EQ.6) GOTO 3552 IF (LENYS(IBUF).EQ.0) GOTO 8120 PRINT *,' ' PRINT *,'Which position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8121) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8121 ENDIF CALL XTRACT(IBUF,IY,ICH) ICH = ICH + 1

GOTO 8122 ELSEIF (IWHOP.EQ.12) THEN * OPMESS = ' EXTRACT Y-SLICE FROM FRAME ' PRINT *,'From which buffer? ' 8110 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8110 IF (LENXS(IBUF).EQ.0) GOTO 8110 PRINT *,' ' 8111 PRINT *,'Which position: 1 .. ',LENXS(IBUF) READ (*,'(I3)',ERR=8111) IX IF (IY.EQ.0) THEN IY = (1+LENXS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENXS(IBUF)) THEN GOTO 8111 ENDIF CALL YTRACT(IBUF,IX,ICH) ELSEIF (IWHOP.EQ.13) THEN * OPMESS = ' EXTRACT SLICES FROM ALL COMPATIBLE FRAMES ' PRINT *,'From which buffer? ' 8200 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8200 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8200 PRINT *,' ' 8201 PRINT *,'Which position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8201) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8201 ENDIF ISBUF = IBUF ISTART = ICH ARCHTP(1) = TYPS(IBUF) ARCHTP(2) = LENXS(IBUF) ARCHTP(3) = LENYS(IBUF) ARCHTP(4) = IY CALL GOTOXY(0,0) CALL CLS DO 8202 IBUF = 1,31 IF ((TYPS(IBUF).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.LENXS(IBUF)).AND. & (ARCHTP(3).EQ.LENYS(IBUF)).AND.IBUF.NE.6) THEN ICH = ISTART PRINT *,'FROM BUFFER ',IBUF,' INTO SLICE ',ICH CALL XTRACT(IBUF,IY,ICH) ISTART = ISTART + 1 IF (ISTART.GT.80) GOTO 3552 ENDIF 8202 CONTINUE CALL WAIT(0.85) ELSEIF (IWHOP.EQ.14) THEN * OPMESS = ' PLOT ALL COMPATIBLE SLICES ' ARCHTP(1) = TYPTAG(ICH) ARCHTP(2) = NPNTAG(ICH) ARCHTP(3) = FRAMTG(ICH) ARCHTP(4) = WHERTG(ICH) ICHS(1) = ICH

J = 1 DO 8203 ICH = 1,80 IF ( (TYPTAG(ICH).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.NPNTAG(ICH)).AND . ((ARCHTP(4).EQ.WHERTG(ICH)).OR.NUML.OR.CAPS) .AND. ((ARCHTP(3).NE.FRAMTG(ICH)).OR.ICH.NE.ICHS(1)) ) THEN J = J + 1 ICHS(J) = ICH ENDIF 8203 CONTINUE CALL PLTSLS(ICHS(1),J) ELSEIF (IWHOP.EQ.15) THEN * OPMESS = ' LIST ALL COMPATIBLE SLICES ' ARCHTP(1) = TYPTAG(ICH) ARCHTP(2) = NPNTAG(ICH) ARCHTP(3) = FRAMTG(ICH) ARCHTP(4) = WHERTG(ICH) ICHS(1) = ICH J = 1 DO 8204 ICH = 1,80 IF ( (TYPTAG(ICH).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.NPNTAG(ICH)).AND . & ((ARCHTP(4).EQ.WHERTG(ICH)).OR.NUML.OR.CAPS) .AND. & ((ARCHTP(3).NE.FRAMTG(ICH)).OR.ICH.NE.ICHS(1)) ) THEN J = J + 1 ICHS(J) = ICH ENDIF 8204 CONTINUE CALL LSTSLS(ICHS(1),J) ELSEIF (IWHOP.EQ.16) THEN * OPMESS = ' EXTRACT MULTIPLE AVERAGE SLICES FROM FRAMES ' 8132 PRINT *,'FOR SLICE #',ICH PRINT *,'From which buffer? ' 8130 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8130 IF (IBUF.EQ.6) GOTO 3552 IF (LENYS(IBUF).EQ.0) GOTO 8130 PRINT *,' ' 8131 PRINT *,'Which start position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8131) IY IF (IY.EQ.0) THEN IY = (2+LENYS(IBUF))/3 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8131 ENDIF 8134 PRINT *,'Which end position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8134) IX IF (IX.EQ.0) THEN IX = (1+2*LENYS(IBUF))/3 ELSEIF (IX.LT.0.OR.IX.GT.LENYS(IBUF)) THEN GOTO 8134 ENDIF IF (IY.EQ.IX) THEN IY = IY -1 IX = IX + 1 ENDIF IF (IY.GT.IX) THEN I = IX IX = IY IY = I & &

ENDIF IF (IY.LE.0) IY = 1 IF (IX.GT.LENYS(IBUF)) IX = LENYS(IBUF) CALL XTRAMN(IBUF,IY,IX,ICH) ICH = ICH + 1 GOTO 8132 ELSEIF (IWHOP.EQ.17) THEN * OPMESS = ' EXTRACT AVERAGE SLICES FROM ALL COMPATIBLE FRAMES ' PRINT *,'From which buffer? ' 8300 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8300 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8300 PRINT *,' ' 8301 PRINT *,'Which start position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8301) IY IF (IY.EQ.0) THEN IY = (2+LENYS(IBUF))/3 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8301 ENDIF 8303 PRINT *,'Which end position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8303) IX IF (IX.EQ.0) THEN IX = (1+2*LENYS(IBUF))/3 ELSEIF (IX.LT.0.OR.IX.GT.LENYS(IBUF)) THEN GOTO 8303 ENDIF IF (IY.EQ.IX) THEN IY = IY -1 IX = IX + 1 ENDIF IF (IY.GT.IX) THEN I = IX IX = IY IY = I ENDIF IF (IY.LE.0) IY = 1 IF (IX.GT.LENYS(IBUF)) IX = LENYS(IBUF) ISBUF = IBUF ISTART = ICH ARCHTP(1) = TYPS(IBUF) ARCHTP(2) = LENXS(IBUF) ARCHTP(3) = LENYS(IBUF) ARCHTP(4) = IY CALL GOTOXY(0,0) CALL CLS DO 8302 IBUF = 1,31 IF ((TYPS(IBUF).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.LENXS(IBUF)).AND. & (ARCHTP(3).EQ.LENYS(IBUF)).AND.IBUF.NE.6) THEN ICH = ISTART PRINT *,'FROM BUFFER ',IBUF,' INTO SLICE ',ICH CALL XTRAMN(IBUF,IY,IX,ICH) ISTART = ISTART + 1 IF (ISTART.GT.80) GOTO 3552 ENDIF 8302 CONTINUE

CALL WAIT(0.85) ELSEIF (IWHOP.EQ.18) THEN * OPMESS = ' EXTRACT MULTIPLE MEDIAN (3) SLICES FROM FRAMES ' 8152 PRINT *,'FOR SLICE #',ICH PRINT *,'From which buffer? ' 8150 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8150 IF (IBUF.EQ.6) GOTO 3552 IF (LENYS(IBUF).EQ.0) GOTO 8150 PRINT *,' ' 8151 PRINT *,'Which position: 2 .. ',LENYS(IBUF)-1 READ (*,'(I3)',ERR=8151) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8151 ENDIF IF (IY.LE.1) IY = 2 IF (IY.GE.LENYS(IBUF)) IY = LENYS(IBUF) - 1 CALL XTRMD3(IBUF,IY,ICH) ICH = ICH + 1 GOTO 8152 ELSEIF (IWHOP.EQ.19) THEN * OPMESS = ' EXTRACT MEDIAN (3) SLICES FROM ALL COMPATIBLE FRAMES ' PRINT *,'From which buffer? ' 8310 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8310 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8310 PRINT *,' ' 8311 PRINT *,'Which position: 2 .. ',LENYS(IBUF)-1 READ (*,'(I3)',ERR=8311) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8311 ENDIF IF (IY.LE.1) IY = 2 IF (IY.GT.LENYS(IBUF)) IY = LENYS(IBUF) - 1 ISBUF = IBUF ISTART = ICH ARCHTP(1) = TYPS(IBUF) ARCHTP(2) = LENXS(IBUF) ARCHTP(3) = LENYS(IBUF) ARCHTP(4) = IY CALL GOTOXY(0,0) CALL CLS DO 8312 IBUF = 1,31 IF ((TYPS(IBUF).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.LENXS(IBUF)).AND. & (ARCHTP(3).EQ.LENYS(IBUF)).AND.IBUF.NE.6) THEN ICH = ISTART PRINT *,'FROM BUFFER ',IBUF,' INTO SLICE ',ICH CALL XTRMD3(IBUF,IY,ICH) ISTART = ISTART + 1 IF (ISTART.GT.80) GOTO 3552 ENDIF 8312 CONTINUE

CALL WAIT(0.85) ELSEIF (IWHOP.EQ.20) THEN * OPMESS = ' EXTRACT MULTIPLE MEDIAN (5) SLICES FROM FRAMES ' 8162 PRINT *,'FOR SLICE #',ICH PRINT *,'From which buffer? ' 8160 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8160 IF (IBUF.EQ.6) GOTO 3552 IF (LENYS(IBUF).EQ.0) GOTO 8160 PRINT *,' ' 8161 PRINT *,'Which start position: 3 .. ',LENYS(IBUF)-2 READ (*,'(I3)',ERR=8161) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8161 ENDIF IF (IY.LE.2) IY = 3 IF (IY.GE.LENYS(IBUF)-1) IY = LENYS(IBUF) - 2 CALL XTRMD5(IBUF,IY,ICH) ICH = ICH + 1 GOTO 8162 ELSEIF (IWHOP.EQ.21) THEN * OPMESS = ' EXTRACT MEDIAN (5) SLICES FROM ALL COMPATIBLE FRAMES ' PRINT *,'From which buffer? ' 8320 IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8320 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8320 PRINT *,' ' 8321 PRINT *,'Which position: 3 .. ',LENYS(IBUF)-2 READ (*,'(I3)',ERR=8321) IY IF (IY.EQ.0) THEN IY = (1+LENYS(IBUF))/2 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8321 ENDIF IF (IY.LE.2) IY = 3 IF (IY.GE.LENYS(IBUF)-1) IY = LENYS(IBUF) - 2 ISBUF = IBUF ISTART = ICH ARCHTP(1) = TYPS(IBUF) ARCHTP(2) = LENXS(IBUF) ARCHTP(3) = LENYS(IBUF) ARCHTP(4) = IY CALL GOTOXY(0,0) CALL CLS DO 8322 IBUF = 1,31 IF ((TYPS(IBUF).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.LENXS(IBUF)).AND. & (ARCHTP(3).EQ.LENYS(IBUF)).AND.IBUF.NE.6) THEN ICH = ISTART PRINT *,'FROM BUFFER ',IBUF,' INTO SLICE ',ICH CALL XTRMD5(IBUF,IY,ICH) ISTART = ISTART + 1 IF (ISTART.GT.80) GOTO 3552 ENDIF 8322 CONTINUE

* 8331

* * 8172 8170

8171

8174

* 8340

8341

CALL WAIT(0.85) ELSEIF (IWHOP.EQ.22) THEN OPMESS = 'COPY SEQUENTIAL GROUP OF SLICES ' PRINT *,' How many to copy? (+=copy up, 0=no-op, -=copy down)' READ (*,'(BN,I3)',ERR=8331) I CALL CPYSLS(ICH1,ICH2,I) ELSEIF (IWHOP.EQ.23) THEN OPMESS = 'ERASE SEQUENTIAL GROUP OF SLICES ' CALL ERASLS(ICH1,ICH2) ELSEIF (IWHOP.EQ.24) THEN OPMESS = ' EXTRACT MULTIPLE MEDIAN SLICES FROM FRAMES ' PRINT *,'FOR SLICE #',ICH PRINT *,'From which buffer? ' IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8170 IF (IBUF.EQ.6) GOTO 3552 IF (LENYS(IBUF).EQ.0) GOTO 8170 PRINT *,' ' PRINT *,'Which start position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8171) IY IF (IY.EQ.0) THEN IY = (2+LENYS(IBUF))/3 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8171 ENDIF PRINT *,'Which end position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8174) IX IF (IX.EQ.0) THEN IX = (1+2*LENYS(IBUF))/3 ELSEIF (IX.LT.0.OR.IX.GT.LENYS(IBUF)) THEN GOTO 8174 ENDIF IF (IY.EQ.IX) THEN IY = IY -1 IX = IX + 1 ENDIF IF (IY.GT.IX) THEN I = IX IX = IY IY = I ENDIF IF (IY.LE.0) IY = 1 IF (IX.GT.LENYS(IBUF)) IX = LENYS(IBUF) CALL XTRAMD(IBUF,IY,IX,ICH) ICH = ICH + 1 GOTO 8172 ELSEIF (IWHOP.EQ.25) THEN OPMESS = ' EXTRACT MEDIAN SLICES FROM ALL COMPATIBLE FRAMES ' PRINT *,'From which buffer? ' IBUF = MENUFM() IF (IBUF.LT.1.OR.IBUF.GT.31) GOTO 8340 IF (IBUF.EQ.6) THEN IOP = 1 GOTO 8000 ENDIF IF (LENYS(IBUF).EQ.0) GOTO 8340 PRINT *,' ' PRINT *,'Which start position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8341) IY IF (IY.EQ.0) THEN

IY = (2+LENYS(IBUF))/3 ELSEIF (IY.LT.0.OR.IY.GT.LENYS(IBUF)) THEN GOTO 8341 ENDIF 8343 PRINT *,'Which end position: 1 .. ',LENYS(IBUF) READ (*,'(I3)',ERR=8343) IX IF (IX.EQ.0) THEN IX = (1+2*LENYS(IBUF))/3 ELSEIF (IX.LT.0.OR.IX.GT.LENYS(IBUF)) THEN GOTO 8343 ENDIF IF (IY.EQ.IX) THEN IY = IY -1 IX = IX + 1 ENDIF IF (IY.GT.IX) THEN I = IX IX = IY IY = I ENDIF IF (IY.LE.0) IY = 1 IF (IX.GT.LENYS(IBUF)) IX = LENYS(IBUF) ISBUF = IBUF ISTART = ICH ARCHTP(1) = TYPS(IBUF) ARCHTP(2) = LENXS(IBUF) ARCHTP(3) = LENYS(IBUF) ARCHTP(4) = IY CALL GOTOXY(0,0) CALL CLS DO 8342 IBUF = 1,31 IF ((TYPS(IBUF).EQ.ARCHTP(1)).AND.(ARCHTP(2).EQ.LENXS(IBUF)).AND. & (ARCHTP(3).EQ.LENYS(IBUF)).AND.IBUF.NE.6) THEN ICH = ISTART PRINT *,'FROM BUFFER ',IBUF,' INTO SLICE ',ICH CALL XTRAMD(IBUF,IY,IX,ICH) ISTART = ISTART + 1 IF (ISTART.GT.80) GOTO 3552 ENDIF 8342 CONTINUE CALL WAIT(0.85) ELSEIF (IWHOP.EQ.26) THEN * OPMESS = ' SCATTERPLOT SLICE AGAINST SLICE ' CALL PLTSCA(ICH1,ICH2) ENDIF IWHOP = KTEST3(-1,0,26) IF (IWHOP.GT.0) GOTO 3559 IF (ABORT.OR.ESCAPE.OR.INTRPT) GOTO 1010 CALL WAITQ(0.35) IWHOP = KTEST3(-1,0,26) 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 *---------ENTRY OPSSLC(IIWHOP) IWHOP = IIWHOP AUTOEX = .TRUE. GOTO 3559 *---------ENTRY SLCSTA IWHOP = 5 AUTOEX = .TRUE. GOTO 3559 END

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