You are on page 1of 21

$CHAREQU

$BINARY
$SEGMENT %_TELPAR
*----------------------------------------------------------------------
SUBROUTINE LODPAR(FNAME)
CHARACTER*(*) FNAME
CHARACTER*20 FRAME,TC*1,TCALGN(2)*1,TCTC*1,FNAME3*24
CHARACTER PFN*18,FNAME2*24,PFNFOO*18,FNAM(4)*24,VOL*6,FN*8,EXT*3
INTEGER*4 ALLOC,GETBUF,MARK,THEBUF,THELEN,KADDR,FCALL1,RQQXXP
INTEGER*4 IXLEN,IYLEN,ILENTR,ILENFR,INTR,NTR,LENFR,LENTR,IXNUM,IYNUM,SENBAS,SENDAT
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP
INTEGER*4 UNITNO,LENRQX,IOADDR,ISTAT
INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR
INTEGER*2 L,ERR2
INTEGER*1 PFNAME(18),PFFOO(18),WHSCAN,SDKLFD
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,AUTOFM,FILEXS
LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR
EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC)
EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR)
EQUIVALENCE (PFN,PFNAME(1)),(PFNFOO,PFFOO(1))
COMMON /PQQXXR/UNITNO,LENRQX,IOADDR,PFNFOO
COMMON /PARAFM/AUTOFM,/NTRVN/ ABORT,ESCAPE,INTRPT
COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR
COMMON /ZEROS/ ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/ AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS
COMMON /FRAMNG/LENFR,LENTR,NTR,/OMAFHG/WHSCAN,SDKLFD
SAVE /OMAPAR/,/OMAPR2/,/FRAMNG/,/PARAFM/,/PQQXXR/,ISTAT
SAVE /ZEROS/,/AMPLS/,/KEYGET/,/SHFSTA/,/NTRVN/,/OMAFHG/
$INCLUDE PFUTIL.COM
EXTERNAL RQQXXP,TELPAR,FCALL1,CALL2,CALL4,FRAMLN,ALLOC,GETBUF
SAVE
CALL CRCLS
9876 CALL RUNSTQ(ISTAT)
IF (ISTAT.GE.2) CALL PARSTQ(ISTAT)
IF (ISTAT.GE.2) THEN
CALL PARSTA(ISTAT)
IF (ISTAT.LE.1.AND.ISTAT.GE.0) GOTO 9876
CALL PAUSE(' WAITING FOR CORRECTION')
IF (ABORT) STOP
IF (ESCAPE.OR.INTRPT) RETURN
GOTO 9876
ENDIF
CALL STOPAR
MARK = ALLOC(0)
LENGTH = 32768
9432 CONTINUE
THEBUF = GETBUF(LENGTH)
IF (THEBUF.EQ.0) THEN
LENGTH = LENGTH/2
IF (LENGTH.GE.4095) GOTO 9432
STOP 'LODPAR: Can''t acquire enough memory!'
ENDIF
ISBUF = THEBUF
THELEN = KADDR(LENGTH)
J = 0
CALL STRIPF(FNAME)
TCTC = FNAME(1:1)
CALL FNCHCK(FNAME,'PAR',FNAME2)
9123 CONTINUE
PRINT *,'LODPAR: LOOKING FOR FILE: ',FNAME2
INQUIRE (FILE=FNAME2,EXIST=FILEXS)
IF (.NOT.FILEXS) THEN
IF (J.LE.9) THEN
TC = FNAME2(1:1)
ITC1 = ICHAR(TC) - $30
IF (ITC1.GE.0.AND.ITC1.LE.8) THEN
ITC1 = ITC1 + 1
J = J + 1
IF (ITC1.GT.8) ITC1 = 0
ITC1 = ITC1 + $30
TC = CHAR(ITC1)
FNAME2(1:1) = TC
GOTO 9123
ELSE
FNAME2 = '4:'//FNAME
CALL FNCHCK(FNAME2,'PAR',FNAME3)
FNAME2 = FNAME3
J = 1
GOTO 9123
ENDIF
ENDIF
PRINT *,' NONE OF THE ABOVE FOUND ... '
IKNM = ICHAR(FNAME(5:5)) - 48
TC = FNAME(1:1)
IF (IKNM.LT.0.OR.IKNM.GT.9) IKNM = ICHAR(FNAME(6:6)) - 48
IF (IKNM.LT.0.OR.IKNM.GT.9) IKNM = 4
PRINT *,' starting search for corresponding standard scan.'
CALL WAIT(0.85)
IF (IKNM.EQ.3) THEN
FNAM(1) = 'HSCAN170.PAR'
FNAM(2) = 'HSCAN170.OUT'
FNAM(3) = 'SCAN170.PAR'
FNAM(4) = 'SCAN170.OUT'
ELSEIF (IKNM.EQ.4) THEN
FNAM(1) = 'SCAN128.PAR'
FNAM(2) = 'SCAN128.OUT'
FNAM(3) = 'HSCAN128.PAR'
FNAM(4) = 'HSCAN128.OUT'
ELSEIF (IKNM.EQ.5) THEN
FNAM(1) = 'SCAN102.PAR'
FNAM(2) = 'SCAN102.OUT'
FNAM(3) = 'HSCAN102.PAR'
FNAM(4) = 'HSCAN102.OUT'
ELSEIF (IKNM.EQ.6) THEN
FNAM(1) = 'SCAN85.PAR'
FNAM(2) = 'SCAN85.OUT'
FNAM(3) = 'HSCAN85.PAR'
FNAM(4) = 'HSCAN85.OUT'
ELSEIF (IKNM.EQ.7) THEN
FNAM(1) = 'SCAN73.PAR'
FNAM(2) = 'SCAN73.OUT'
FNAM(3) = 'HSCAN73.PAR'
FNAM(4) = 'HSCAN73.OUT'
ELSEIF (IKNM.EQ.8) THEN
FNAM(1) = 'SCAN64.PAR'
FNAM(2) = 'SCAN64.OUT'
FNAM(3) = 'HSCAN64.PAR'
FNAM(4) = 'HSCAN64.OUT'
ELSEIF (IKNM.EQ.9) THEN
FNAM(1) = 'SCAN56.PAR'
FNAM(2) = 'SCAN56.OUT'
FNAM(3) = 'HSCAN56.PAR'
FNAM(4) = 'HSCAN56.OUT'
ELSE
FNAM(1) = 'HSCAN.PAR'
FNAM(2) = 'HSCAN.OUT'
FNAM(3) = 'SCAN.PAR'
FNAM(4) = 'SCAN.OUT'
ENDIF
J = 0
CALL CRCLS
9124 CONTINUE
IF ((TCTC.EQ.'H'.OR.TCTC.EQ.'h').AND.IKNM.GT.3) THEN
DO 9125 II = 1,4
IK = II + 2
IF (IK.GT.4) IK = IK - 4
IF (J.EQ.0) THEN
FNAME2 = FNAM(IK)
ELSE
IJ = J + $33
IF (IJ.GE.$36) IJ = IJ - 6
FNAME2 = CHAR(IJ)//':'//FNAM(IK)
ENDIF
PRINT *,'LODPAR: LOOKING FOR FILE: ',FNAME2
INQUIRE (FILE=FNAME2,EXIST=FILEXS)
IF (FILEXS) GOTO 1010
9125 CONTINUE
ELSE
DO 9126 II = 1,4
IF (J.EQ.0) THEN
FNAME2 = FNAM(II)
ELSE
IJ = J + $33
IF (IJ.GE.$36) IJ = IJ - 6
FNAME2 = CHAR(IJ)//':'//FNAM(II)
ENDIF
PRINT *,'LODPAR: LOOKING FOR FILE: ',FNAME2
INQUIRE (FILE=FNAME2,EXIST=FILEXS)
IF (FILEXS) GOTO 1010
9126 CONTINUE
ENDIF
J = J + 1
IF (J.LT.5) GOTO 9124
J = 0
9127 CONTINUE
IF (J.EQ.0) THEN
FNAME2 = 'HSCAN.PAR'
ELSE
IJ = J + $33
IF (IJ.GE.$36) IJ = IJ - 6
FNAME2 = CHAR(IJ)//':HSCAN.PAR'
ENDIF
PRINT *,'LODPAR: LOOKING FOR FILE: ',FNAME2
INQUIRE (FILE=FNAME2,EXIST=FILEXS)
IF (FILEXS) GOTO 1010
IF (J.EQ.0) THEN
FNAME2 = 'SCAN.PAR'
ELSE
IJ = J + $33
IF (IJ.GE.$36) IJ = IJ - 6
FNAME2 = CHAR(IJ)//':SCAN.PAR'
ENDIF
PRINT *,'LODPAR: LOOKING FOR FILE: ',FNAME2
INQUIRE (FILE=FNAME2,EXIST=FILEXS)
IF (FILEXS) GOTO 1010
J = J + 1
IF (J.LT.5) GOTO 9127
ENDIF
1010 FNAME = FNAME2
J = LEN(FNAME)
FNAME2 = FNAME
* CALL STRIP(FNAME2)
* CALL PASFOR(FNAME2,PFNAME)
* CONTINUE
* PFNFOO = PFN
* CONTINUE
* IOADDR = OPN2RB(PFNAME)
* IF (IOADDR.EQ.0) THEN
* PRINT *,'IOADDR = 0, OPENING W/O BUFFERRED OPTION'
* IOADDR = OPN2R(PFNAME)
* IJ = IOSTAT()
* ELSE
* IJ = RESET2(PFNAME,IOADDR)
* ENDIF
* IF (IJ.NE.0.AND.IOADDR.LE.0) RETURN
UNITNO = 72
OPEN (UNIT=UNITNO,FILE=FNAME,FORM='BINARY',ERR=1,IOSTAT=IJ)
IOADDR = 72
IXLEN = 0
IYLEN = 0
WRITE (11,'(A)',ERR=8229) 'LODPAR: Downloading, reading file ...'
8229 LENGTH = FCALL1(RQQXXP,THEBUF)
WRITE (11,'(A,I10)',ERR=3)'LODPAR: LENGTH = ',LENGTH
3 LENGTH = LENRQX
PRINT *,'LODPAR: LENGTH = ',LENGTH,' from file: ',FNAME
IF (LENGTH.EQ.0) RETURN
CALL NTRSCN
CALL RUNSTQ(ISTAT)
IF (ISTAT.EQ.0) CALL STOPAR
THEBUF = ISBUF
THELEN = KADDR(LENGTH)
IOADDR = IJKL
WRITE (11,'(A,I10)',ERR=4554)'LODPAR: read LENGTH = ',LENGTH,' starting PAR load.'
4554 CONTINUE
CALL CALL2(TELPAR,THEBUF,THELEN)
ZVALID = .FALSE.
AVALID = .FALSE.
WRITE (11,'(A,I10)',ERR=4)'LODPAR: processed LENGTH = ',LENGTH
WRITE (11,'(A)',ERR=4) 'Downloading complete'
4 PRINT *,'processed: LENGTH = ',LENGTH
CLOSE (UNITNO,ERR=22,STATUS='KEEP')
22 CONTINUE
* IJKL = IOADDR
* I = CLOS2(IOADDR)
CALL RUNSTQ(ISTAT)
IF (ISTAT.GE.2) GOTO 6
5 CONTINUE
ILENFR = KADDR(LENFR)
ILENTR = KADDR(LENTR)
INTR = KADDR(NTR)
IF (IA128.NE.IA256.OR.IA256.NE.IA512.OR.IA512.NE.IA128) THEN
PRINT *,' '
PRINT *,'LODPAR: IA128, ILENFR, ILENTR, INTR = ',IA128,' ',ILENFR,' ',ILENTR,' ',INTR
PRINT *,' IA128, IA256, IA512 =',IA128,' ',IA256,' ',IA512
PRINT *,' '
IF (IA256.EQ.IA512) IA128 = IA256
ENDIF
LKJI = IA256
IF (.NOT.AUTOFM) GOTO 6
PRINT *,' DETERMINING FRAME DIMENSIONS '
WHSCAN = 4
* CALL FRAMLN(A128,LENFR,LENTR,NTR)
CALL CALL4(FRAMLN,LKJI,ILENFR,ILENTR,INTR)
IXLEN = LENTR
IYLEN = NTR
IXNUM = IXLEN
PRINT *,' PIXELS/TRACK = ',LENTR
PRINT *,' TRACKS/FRAME = ',NTR
PRINT *,' PIXELS/FRAME = ',LENFR
IYNUM = IYLEN
IIYLEN = IYLEN
IIXLEN = IXLEN
CALL WAIT(0.5)
6 CONTINUE
*C PRINT *,' CLOS2 RESULT = ',I
*C THEBUF = ISBUF
*C THELEN = KADDR(LENGTH)
*C IOADDR = IJKL
*C* CALL CALL2(FOO,THEBUF,THELEN)
2 CALL RLSE(MARK)
RETURN
1 PRINT *,'ERROR OPENING ',FNAME
GOTO 2
END
*----------------------------------------------------------------------
INTEGER*4 FUNCTION RQQXXP(PARPRG)
CHARACTER*20 FRAME,PFNFOO*18
INTEGER*4 UNITNO,LENRQX,I,J,IOADDR,IXLEN,IYLEN,SENBAS,SENDAT,H0040
INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0,HFF3F
INTEGER*2 LAST4(4),I2AND2,I2OR2,I2EOR2,HF000,HFFF8,H00FF,H01FF,HFF38
INTEGER*2 ASCAN(7000),SCNQLN,TRKCNT,CHLCNT,LASTL,L,LL,PREAD2,ERROR
INTEGER*2 PARPRG(16384),CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
INTEGER*1 PFFOO(18)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,DOSCAN
LOGICAL*2 LINE,CATHV2,FRCV2N,FRCV2F
EQUIVALENCE (PFNFOO,PFFOO(1)),(CHNLS(0),CHLS(0))
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /PARLS4/LAST4,/PQQXXR/UNITNO,LENRQX,IOADDR,PFNFOO
COMMON /OMAPAR/IXLEN,IYLEN,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /PSYNCH/LINE,/OMASCN/SCNQLN,ASCAN,/OMADIT/DOSCAN
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
SAVE /OMAPAR/,/PQQXXR/,/PSYNCH/,/PARSCN/,/PARLS4/,/OMASCN/,/OMADIT/
SAVE /OMASAT/
EXTERNAL I2OR2,I2AND2,I2EOR2
SAVE
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
HF000 = $F000
HFFF8 = $FFF8
HFF38 = $FF38
H00FF = $00FF
H01FF = $01FF
H0040 = $0000
HFF3F = $FFFF
IF (FRCV2F) HFF3F = $FF3F
IF (FRCV2N.OR.CATHV2) H0040 = $0040
CHNORM = $1000
IF (FRCV2N.OR.CATHV2) CHNORM = $1040
THEX0 = 0
TRKCNT = 0
CHLCNT = 0
DO 1111 I = 0,511
CHNLS(I) = CHNORM
1111 CONTINUE
IF (.NOT.LINE) THEN
DO 11 I = 1,16384
PARPRG(I) = $7006
11 CONTINUE
ELSE
DO 21 I = 1,16384
PARPRG(I) = $7106
21 CONTINUE
ENDIF
ITRIES = 0
12 IJ = IOSTAT()
ITRIES = ITRIES + 1
IF (ITRIES.GE.5) THEN
J = 0
GOTO 2
ENDIF
LSTTRK = 0
LSTCHL = 0
DO 1 I = 1,16384
J = I
C* IREC = I
C* READ (UNIT=UNITNO,REC=IREC,ERR=3) L
LASTL = L
L = PREAD2(IOADDR,ERROR)
IF (ERROR.EQ.-1) THEN
IF (I.EQ.1) THEN
REWIND(IOADDR)
GOTO 12
ENDIF
IJ = IOSTAT()
L = PREAD2(IOADDR,ERROR)
IF (ERROR.EQ.0) GOTO 7
GOTO 2
ENDIF
IF (ERROR.NE.0) THEN
IF (I.EQ.1) THEN
REWIND(IOADDR)
UNITNO = ERROR
WRITE (11,'(A,I3)',ERR=5) 'LODPAR>RQQXXP: ERROR READING UNIT = ',UNITNO
5 PRINT *,'LODPAR>RQQXXP: ERROR READING UNIT = ',UNITNO,' L = ',L
GOTO 12
ELSE
GOTO 3
ENDIF
ENDIF
7 CONTINUE
LL = L
ML = I2AND2(LL,$F000)
LL = I2EOR2(ML,$1000)
IF (LL.EQ.0) THEN
LL = I2OR2(L,H0040)
L = I2AND2(LL,HFF3F)
ENDIF
IF (LASTL.GE.0.AND.LASTL.LE.511) THEN
CHLCNT = LASTL
LSTCHL = MAX(LSTCHL,LASTL)
CHNLS(CHLCNT) = L
ENDIF
LL = L
ML = I2AND2(LL,HFF38)
IF (ML.EQ.$1208) THEN
LAST4(3) = LASTL
LSTCHL = MAX(LSTCHL,LASTL)
LAST4(4) = L
GOTO 1001
ELSEIF (ML.EQ.$1600) THEN
LAST4(1) = LASTL
LSTCHL = MAX(LSTCHL,LASTL)
LAST4(2) = L
GOTO 1001
ELSEIF (ML.EQ.$1608) THEN
LAST4(1) = LASTL
LSTCHL = MAX(LSTCHL,LASTL)
LAST4(2) = L
LAST4(3) = LASTL
LAST4(4) = L
GOTO 1001
ENDIF
ML = I2AND2(LL,HF000)
IF (ML.EQ.$6000) THEN
LL = L
TRKCNT = I2AND2(LL,H00FF)
LSTTRK = MAX(LSTTRK,TRKCNT)
GOTO 1001
ELSEIF (ML.EQ.$2000) THEN
TRACKS(2,TRKCNT) = L
GOTO 1001
ELSEIF (ML.EQ.$3000) THEN
TRACKS(3,TRKCNT) = L
GOTO 1001
ELSEIF (ML.EQ.$4000) THEN
LL = L
THEX0 = I2AND2(LL,H01FF)
TRACKS(1,TRKCNT) = L
GOTO 1001
ENDIF
IF (DOSCAN) ASCAN(I) = L
IF ((L.GE.$D000.AND.L.LE.$E000).OR.(L.GE.-12288.AND.L.LE.-8192)) GOTO 2
1001 CONTINUE
IF (DOSCAN) ASCAN(I) = L
PARPRG(I) = L
1 CONTINUE
2 CONTINUE
IF (ERROR.NE.0.AND.ERROR.NE.-1) PRINT *,' RQQXXP: ERROR = ',ERROR
LENRQX = J
IF (DOSCAN) THEN
SCNQLN = J
DO 1221 I = (J+1),4096
ASCAN(I) = 0
1221 CONTINUE
ENDIF
RQQXXP = J
DO 111 I = J,16384
L = PREAD2(IOADDR,ERROR)
IF (ERROR.NE.0) GOTO 112
IF (L.GT.0.AND.L.LT.600) THEN
IXLEN = L
L = PREAD2(IOADDR,ERROR)
IF (ERROR.NE.0) GOTO 112
IF (L.GT.0.AND.L.LT.300) IYLEN = L
GOTO 112
ENDIF
111 CONTINUE
112 CONTINUE
MODE2D = (PARPRG(J).EQ.$7006) .OR. (PARPRG(J).EQ.$7806)
RETURN
3 CONTINUE
WRITE (11,'(A,I3)',ERR=4) 'LODPAR>RQQXXP: ERROR READING UNIT = ',UNITNO
4 PRINT *,'LODPAR>RQQXXP: ERROR READING UNIT = ',UNITNO
J = J - 1
GOTO 2
END
*----------------------------------------------------------------------
SUBROUTINE FRAMLN(A512,LENFR,LENTR,NTR)
CHARACTER*20 FRAME,HAPS(32)*8
INTEGER*4 IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512,KADDR,FPEND,FMEND
INTEGER*4 LLENFR,LLENTR,NNTR,FIRST,SECOND,LENFR,LENTR,NTR,ISTAT
INTEGER*4 IXNUM,IYNUM,SENDAT,SENBAS,APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX
INTEGER*4 APS(0:7),LNS(0:7),IAPS(32),LENS(32),TRIES,MSKTON
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP
INTEGER*2 A512(0:262144),FREND,FWPEEK,VAL,I2AND2,FOO2(2),TYPS(32)
INTEGER*1 WHSCAN,SDKLFD
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,FCKD
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,LINE,BUFGUD(32),BUFUSE(32)
LOGICAL*1 CBLNRM,CBLINV,ERR1D
EQUIVALENCE (APS(0),APMAIN),(APS(1),AP1),(APS(2),AP2),(APS(3),AP3)
EQUIVALENCE (APS(4),AP4),(APS(5),AP5),(APS(6),APZR),(APS(7),APMX)
EQUIVALENCE (LNS(0),LNMAIN),(LNS(1),LN1),(LNS(2),LN2),(LNS(3),LN3)
EQUIVALENCE (LNS(4),LN4),(LNS(5),LN5),(LNS(6),LNZR),(LNS(7),LNMX)
COMMON /ZEROS/ ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARCBL/CBLNRM,CBLINV
COMMON /AMPLS/ AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS
COMMON /FRAMNG/LLENFR,LLENTR,NNTR,/OMABFL/BUFGUD,BUFUSE
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /PSYNCH/LINE,/OMAFHG/WHSCAN,SDKLFD
SAVE /OMAPAR/,/FRAMNG/,/OMAPR2/,/PSYNCH/,/OMAFHG/,/OMABFL/,/PARCBL/
SAVE /OMABFR/,/OMACNT/,/OMATYP/,MLENFR,ISTAT
EXTERNAL RUNSTA,RUNSTQ,PARSTA,PARSTQ,TSTR1D,TSTR2D,TSTSTP,MSKPON,MSKPOF
EXTERNAL MSKP01,MSKT01,MSKTON,MSKQON
SAVE
DATA MLENFR/0/,ERR1D/.FALSE./
IA128 = KADDR(A512)
FCKD = IA128.LT.65536 .OR. IA128.NE.IA512 .OR. IA256.NE.IA512
CBLNRM = CBLNRM .AND. (.NOT.CBLINV)
CBLINV = CBLINV .OR. (.NOT.CBLNRM)
IF (FCKD) THEN
PRINT *,'FRAMLN: IA128 = ',IA128,' IA512 = ',IA512
IA128 = IA512
IADDR = IA512
ENDIF
TRIES = 0
CALL TSTR2D
ERR1D = .FALSE.
9901 CONTINUE
ISTAT = 31
IF (ITRIES.LT.4) THEN
CALL RUNSTQ(ISTAT)
ELSE
CALL PARSTQ(ISTAT)
ENDIF
TRIES = TRIES + 1
IF ((ISTAT.GE.2.AND.TRIES.LT.6).OR.(TRIES.EQ.7.AND.ISTAT.GT.2)) THEN
IF (ISTAT.EQ.31) THEN
PRINT *,'FRAMLN: ISTAT = 31 ??'
RETURN
ENDIF
IF (TRIES.LT.7) GOTO 9901
PRINT *,'FRAMLN: ISTAT = ',ISTAT,' ABORTING REST ...'
LENFR = 0
LENTR = 0
NTR = 0
GOTO 9999
ELSE
CALL STOPAR
1111 CONTINUE
CALL RUNSTQ(ISTAT)
IF (ISTAT.EQ.0) GOTO 1111
ENDIF
IADDR = IA512
IF (FCKD) THEN
CALL IZAPIT(IADDR,131072)
ELSE
CALL ZAPIT(A512(0),131072)
ENDIF
LENFR = 2048
IADDR = IA512
CALL PARRUN
CALL TSTR1D
CALL PARRUN
CALL MSKT01
CALL PARRUN
*
* Establish DATA signal sense: NORMAL or INVERTED by reading test data and
* checking the end of frame flag bit (which is "on" only infrequently)
*
IF (FCKD.AND.CBLNRM) THEN
CALL IARNSD(IADDR,LENFR)
ELSEIF (FCKD.AND.CBLINV) THEN
CALL IARNID(IADDR,LENFR)
ELSEIF (CBLNRM) THEN
CALL FARNSD(A512(0),LENFR)
ELSEIF (CBLINV) THEN
CALL FARNID(A512(0),LENFR)
ENDIF
* IF (FCKD.AND.CBLNRM) THEN
* CALL IAREAD(IADDR,LENFR)
* ELSEIF (FCKD.AND.CBLINV) THEN
* CALL IAREID(IADDR,LENFR)
* ELSEIF (CBLNRM) THEN
* CALL FAREAD(A512(0),LENFR)
* ELSEIF (CBLINV) THEN
* CALL FAREID(A512(0),LENFR)
* ENDIF
IN = 0
II = 0
IADDR = IA512
DO 1155 I = 0,2000
VAL = FWPEEK(IADDR)
IADDR = IADDR + 2
IF (VAL.LT.0) THEN
II = II + 1
ELSE
IN = IN + 1
ENDIF
1155 CONTINUE
IF (II.GT.IN) THEN
CBLNRM = .NOT. CBLNRM
CBLINV = .NOT. CBLINV
PRINT *,' FRAMLN: Data format status flags were incorrect.'
ENDIF
IF (CBLNRM) THEN
PRINT *,' FRAMLN: Data input is in NORMAL form.'
ELSE
PRINT *,' FRAMLN: Data input is in INVERTED form.'
ENDIF
IADDR = IA512
IF (FCKD) THEN
CALL IZAPIT(IADDR,2050)
ELSE
CALL ZAPIT(A512(0),2050)
ENDIF
II = 131072
IADDR = IA512
*
* Determine the number of data points in a track. This is done by entering
* 1-D mode, in which the frame is one track, and counting the bytes in a frame
* read to 8 bits/data point. On new interface this part was getting messed up
* as status checking kept putting PAR back into 2-D mode. The call TSTR1D above
* sets the read command used by status testing routines to the run 1-D command.
* Below TSTR2D resets this back to it's normal run 2-D setting.
*
CALL PARRUN
CALL TSTR1D
CALL PARRUN
IF (FCKD.AND.CBLNRM) THEN
CALL ISRNS8(IADDR,II)
ELSEIF (FCKD.AND.CBLINV) THEN
CALL ISRNI8(IADDR,II)
ELSEIF (CBLNRM) THEN
CALL FSRNS8(A512(0),II)
ELSEIF (CBLINV) THEN
CALL FSRNI8(A512(0),II)
ENDIF
IF (II.GT.511) THEN
PRINT *,'FRAMLN: Incorrect LENTR, trying alternate measure.'
CALL TSTR1D
CALL PARRUN
IF (FCKD.AND.CBLNRM) THEN
CALL ISRNSD(IADDR,II)
ELSEIF (FCKD.AND.CBLINV) THEN
CALL ISRNID(IADDR,II)
ELSEIF (CBLNRM) THEN
CALL FSRNSD(A512(0),II)
ELSEIF (CBLINV) THEN
CALL FSRNID(A512(0),II)
ENDIF
II = (II+1)/2
IF (II.GT.511) THEN
PRINT *,'FRAMLN: Incorrect LENTR on alternate measure, setting to 500.'
II = 500
ERR1D = .TRUE.
ENDIF
ENDIF
IADDR = IA512
LENTR = II
LENFR = (II+1)*1024
LENFR = MIN0(LENFR,525316)
LENG = LENFR/2
LENG2 = (LENG+1)/2
II = LENFR
CALL TSTR2D
2222 CONTINUE
CALL STOPAR
CALL RUNSTQ(ISTAT)
IF (ISTAT.EQ.0) THEN
I = MSKTON()
IF (I.NE.0) GOTO 2222
ENDIF
CALL PARR2D
CALL MSKQON
CALL PARR2D
I = LENFR
IF (FCKD) THEN
CALL IZAPIT(IADDR,I)
ELSE
CALL ZAPIT(A512(0),I)
ENDIF
IF (LINE) THEN
FOO2(1) = $7106
ELSE
FOO2(1) = $7006
ENDIF
FOO2(2) = FOO2(1)
CALL TELPAR(FOO2,2)
IADDR = IA512
IF (FCKD.AND.CBLNRM) THEN
CALL IARNSD(IADDR,LENFR)
ELSEIF (FCKD.AND.CBLINV) THEN
CALL IARNID(IADDR,LENFR)
ELSEIF (CBLNRM) THEN
CALL FARNSD(A512(0),LENFR)
ELSEIF (CBLINV) THEN
CALL FARNID(A512(0),LENFR)
ENDIF
* IF (FCKD.AND.CBLNRM) THEN
* CALL IAREAD(IADDR,LENFR)
* ELSEIF (FCKD.AND.CBLINV) THEN
* CALL IAREID(IADDR,LENFR)
* ELSEIF (CBLNRM) THEN
* CALL FAREAD(A512(0),LENFR)
* ELSEIF (CBLINV) THEN
* CALL FAREID(A512(0),LENFR)
* ENDIF
FIRST = -1
SECOND = -1
IADDR = IA512
FREND = $8000
IF (FCKD) THEN
DO 3 I = 0,LENG
VAL = FWPEEK(IADDR)
VAL = I2AND2(VAL,FREND)
IF (VAL.NE.0) THEN
FIRST = I
GOTO 2
ENDIF
IADDR = IADDR + 2
3 CONTINUE
ELSE
DO 1 I = 0,LENG
VAL = A512(I)
VAL = I2AND2(VAL,FREND)
IF (VAL.NE.0) THEN
FIRST = I
GOTO 2
ENDIF
1 CONTINUE
ENDIF
PRINT *,' FRAMLN: End-Of-Frame NOT found in 2D mode, this is 1d scan!'
NTR = 1
LENFR = LENTR
GOTO 9999
2 CONTINUE
NTR = 256
LENFR = LENTR*NTR
FREND = $8000
LENG = MIN0(FIRST+LENG2,LENG) - 1
KKLL = LENTR + 1
KKLL = MAX0(KKLL,3)
IF (FCKD) THEN
DO 13 I = (FIRST+1),LENG
IADDR = IA512 + I*2
VAL = FWPEEK(IADDR)
VAL = I2AND2(VAL,FREND)
IF (VAL.NE.0) THEN
SECOND = I
IF ((SECOND-FIRST).LE.KKLL) THEN
FIRST = SECOND
GOTO 2
ENDIF
GOTO 12
ENDIF
13 CONTINUE
ELSE
DO 11 I = (FIRST+1),LENG
VAL = A512(I)
VAL = I2AND2(VAL,FREND)
IF (VAL.NE.0) THEN
SECOND = I
IF ((SECOND-FIRST).LE.KKLL) THEN
FIRST = SECOND
GOTO 2
ENDIF
GOTO 12
ENDIF
11 CONTINUE
ENDIF
GOTO 113
12 CONTINUE
LENFR = ((SECOND-FIRST)/2)*2
NTR = LENFR/LENTR
PRINT *,' tentative (?) LENFR, LENTR, NTR = ',LENFR,' ',LENTR,' ',NTR
113 CONTINUE
LENFR = (LENTR + 1)*512
IF (FCKD.AND.CBLNRM) THEN
CALL ISRNS8(IADDR,LENFR)
ELSEIF (FCKD.AND.CBLINV) THEN
CALL ISRNI8(IADDR,LENFR)
ELSEIF (CBLNRM) THEN
CALL FSRNS8(A512(0),LENFR)
ELSEIF (CBLINV) THEN
CALL FSRNI8(A512(0),LENFR)
ENDIF
IF (ERR1D) THEN
RNTR = FLOAT(LENFR)/FLOAT(LENTR)
FR = RNTR - AINT(RNTR)
IF (FR.GT.0.49.AND.FR.LT.0.51) LENTR = (LENTR+1)/2
ENDIF
NTR = LENFR/LENTR
PRINT *,' LENFR, LENTR, NTR = ',LENFR,' ',LENTR,' ',NTR
9999 CONTINUE
LLENTR = LENTR
IIXLEN = LENTR
IXNUM = LENTR
IXLEN = LENTR
LLENFR = LENFR
NNTR = NTR
IIYLEN = NTR
IYLEN = NTR
IYNUM = NTR
WHSCAN = 4
I = IABS(LENFR-170000)
IF (I.LE.2) WHSCAN = 1
I = IABS(LENFR-85000)
IF (I.LE.2) WHSCAN = 2
IF (NTR.GT.1) CALL PARR2D
IF (MLENFR.NE.LENFR) THEN
PRINT *,' RECHECKING BUFFER ALLOCATION VALIDITY '
CALL REDOBF
IF (BUFGUD(4)) THEN
IF (.NOT.BUFUSE(4)) THEN
WRITE (11,*,ERR=3002)
& ' FRAMLN: Frame is TOO LARGE to allow use of Zero Correction buffer.'
3002 PRINT *,' FRAMLN: Frame is TOO LARGE to allow use of Zero Correction buffer.'
FCKD = .TRUE.
ENDIF
IF (BUFGUD(5).AND..NOT.BUFUSE(5)) THEN
WRITE (11,*,ERR=3003)
& ' FRAMLN: Frame is TOO LARGE to allow use of Max. Correction buffer.'
3003 PRINT *,' FRAMLN: Frame is TOO LARGE to allow use of Max. Correction buffer.'
FCKD = .TRUE.
ENDIF
IF (FCKD) CALL WAIT(2.5)
ENDIF
MLENFR = LENFR
ENDIF
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE ZAPTRK
CHARACTER PADS*3,NCRUDQ*1,FRAME*20
INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,FLPEEK,INTOF,KADDR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,SENDAT
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,IX,IY,DY
INTEGER*2 CMDS(8,0:511),CMD4(4,0:1023),CMD2(2,0:2047),CMD1(0:4095)
INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0
INTEGER*2 LAST4(4),IFOO,MASK,I2AND2,L2NOT,MASK2,SMASK,CMASK
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ
LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR
LOGICAL*1 FLAG77(0:24),ISGONG,ISIT
EQUIVALENCE (CHNLS(0),CHLS(0))
EQUIVALENCE (CMDS(1,0),CMD4(1,0),CMD2(1,0),CMD1(0))
COMMON /PARCDA/CMDS,/PARLS4/LAST4
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NOREAD,ONOFF,
& DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
SAVE /PARSCN/,/PARLS4/,/OMAPAR/,/PARZQX/,/ZEROS/,/AMPLS/
EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,KADDR,BLKDS,CALL3
IX = 0
IY = 0
DY = 0
9999 CONTINUE
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
CALL STOPAR
CALL CRCLS
PRINT *,' '
PRINT *,' Converting to single track scan program.'
DO 1 I = 0,255
CMDS(1,I) = $6000 + I
CMDS(2,I) = $4000 + IX
CMDS(3,I) = $2800 + IY
CMDS(4,I) = $3000 + DY
CMDS(5,I) = LAST4(1)
CMDS(6,I) = LAST4(2)
CMDS(7,I) = LAST4(3)
CMDS(8,I) = LAST4(4)
1 CONTINUE
11 CONTINUE
LSTTRK = 0
CALL RUNSTQ(ISTAT)
IF (ISTAT.EQ.0) GOTO 11
LENGTH = 2048
CALL TELPAR(CMDS(1,1),LENGTH)
THEX0 = IX
IYNUM = 1
IYLEN = 1
IIYLEN = 1
MODE2D = .FALSE.
CALL RUNPAR
ZVALID = .FALSE.
AVALID = .FALSE.
RETURN
ENTRY TRKZAP(IX0,IY0,IDY)
IX = IX0
IY = IY0
DY = IDY
GOTO 9999
END
*----------------------------------------------------------------------
SUBROUTINE REDOTK(TKSIZE,SPCING)
$SEGMENT %_PRGPAR
ENTRY MODSCN(TKSIZE,SPCING)
CHARACTER*20 FRAME
CHARACTER PADS*3,NCRUDQ*1
INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,SENDAT,FLPEEK,INTOF,KADDR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,END
INTEGER*2 TKSIZE*4,SPCING*4,I2H800,I2OR2,LAST4(4),TRACKS(3,0:255)
INTEGER*2 ASCAN(7000),SCNQLN,CHNLS(0:511),CHLS(0:511),THEX0
INTEGER*2 CMDS(8,0:511),CMD4(4,0:1023),CMD2(2,0:2047),CMD1(0:4095)
INTEGER*2 IFOO,MASK,I2AND2,L2NOT,MASK2,SMASK,CMASK
LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ
LOGICAL*1 FLAG77(0:24),ISGONG,ISIT,NORMAL
EQUIVALENCE (CMDS(1,0),CMD4(1,0),CMD2(1,0),CMD1(0))
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /PARCDA/CMDS,/PARLS4/LAST4
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512,/OMASCN/SCNQLN,ASCAN
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0,/OMADIT/DOSCAN
COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NOREAD,ONOFF,
& DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ
SAVE /PARCDA/,/PARLS4/,/PARSCN/,/OMASCN/,/OMADIT/,/OMAPAR/,/OMAPR2/, /PARZQX/
EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,KADDR,BLKDS,CALL3
SAVE
NORMAL = .TRUE.
GOTO 9000
ENTRY TKREDO(TKSIZE,SPCING)
ENTRY SCNMOD(TKSIZE,SPCING)
NORMAL = .FALSE.
9000 CONTINUE
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) CALL PARSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
CALL STOPAR
IF (NORMAL) THEN
CALL MODTRK(TKSIZE,SPCING)
ELSE
CALL TRKMOD(TKSIZE,SPCING)
ENDIF
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE REGRUV
REAL*8 DTIME,TSET,TIME
INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,SCNWLN
INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0,I2OR2,I2AND2
INTEGER*2 CMDS(8,0:511),CMD4(4,0:1023),CMD2(2,0:2047),CMD1(0:4095)
INTEGER*2 ASCAN(7000),SCNQLN,I2H800,LAST4(4),H0040,HFF3F,L
INTEGER*2 CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
INTEGER*1 WHSCAN,SDKLFD
LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,CATHV2,FRCV2N,FRCV2F
LOGICAL*1 FLAG,FILL,FILL2
EQUIVALENCE (CMDS(1,0),CMD4(1,0),CMD2(1,0),CMD1(0)),(CHNLS(0),CHLS(0))
COMMON /PARLS4/LAST4,/OMAFHG/WHSCAN,SDKLFD,/OMASCN/SCNQLN,ASCAN
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0,/PARCDA/CMDS
COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR
COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP
SAVE /ZEROS/,/AMPLS/,/OMASCN/,/PARCDA/,/PARSCN/,/PARLS4/,/OMASAT/
EXTERNAL I2OR2,I2AND2
SAVE
FLAG = .FALSE.
FILL = .FALSE.
FILL2 = .FALSE.
GOTO 9999
ENTRY REGROO
FILL = .TRUE.
FILL2 = .FALSE.
9999 CONTINUE
JKLM = 0
9997 CONTINUE
CALL RUNSTQ(ISTAT)
JKLM = JKLM + 1
IF (ISTAT.GT.1) THEN
CALL PARSTQ(ISTAT)
IF (ISTAT.GT.1) GOTO 9002
IF (JKLM.LT.3) GOTO 9997
ENDIF
CALL STOPAR
9998 CONTINUE
IF (THEX0.LT.0.OR.THEX0.GT.511) THEX0 = 0
9001 CONTINUE
I2H800 = $0800
H6000 = $6000
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
H0040 = 0
HFF3F = $FFFF
IF (FRCV2N.OR.CATHV2) H0040 = $0040
IF (FRCV2F) HFF3F = $FF3F
DO 5536 I = 1,4
L = I2AND2(LAST4(I),HFF3F)
LAST4(I) = I2OR2(L,H0040)
5536 CONTINUE
CMD1(1) = H6000
CMD1(2) = TRACKS(1,0)
CMD1(3) = TRACKS(2,0)
CMD1(4) = TRACKS(3,0)
IND = 5
DO 5537 I = 0,LSTCHL
CMD1(IND) = I
L = I2AND2(CHNLS(I),HFF3F)
CHNLS(I) = I2OR2(L,H0040)
CMD1(IND+1) = CHNLS(I)
IND = IND + 2
5537 CONTINUE
IF (FILL) THEN
DO 6537 I = (LSTCHL+1),511
CMD1(IND) = I
CMD1(IND+1) = LAST4(4)
IND = IND + 2
6537 CONTINUE
ELSEIF (FILL2) THEN
DO 6538 I = (LSTCHL+1),511
CMD1(IND) = I
CMD1(IND+1) = CHNORM
IND = IND + 2
6538 CONTINUE
ENDIF
IF (LSTTRK.GT.255) LSTTRK = 255
IF (LSTTRK.LT.0) LSTTRK = 0
DO 5538 I = 1,(LSTTRK-1)
CMD1(IND) = H6000+I
CMD1(IND+1) = TRACKS(1,I)
CMD1(IND+2) = TRACKS(2,I)
CMD1(IND+3) = TRACKS(3,I)
CMD1(IND+4) = LAST4(1)
CMD1(IND+5) = LAST4(2)
CMD1(IND+6) = LAST4(3)
CMD1(IND+7) = LAST4(4)
IND = IND + 8
5538 CONTINUE
I = IND - 1
IF (LSTTRK.EQ.0) GOTO 11
I = LSTTRK
CMD1(IND) = H6000+I
CMD1(IND+1) = TRACKS(1,I)
I2H800 = $0800
TRACKS(2,I) = I2OR2(TRACKS(2,I),I2H800)
CMD1(IND+2) = TRACKS(2,I)
CMD1(IND+3) = TRACKS(3,I)
CMD1(IND+4) = LAST4(1)
CMD1(IND+5) = LAST4(2)
CMD1(IND+6) = LAST4(3)
CMD1(IND+7) = LAST4(4)
IND = IND + 8
IF (FILL) THEN
DO 6638 I = (LSTTRK+1),255
IF (IND.GT.4085) GOTO 11
CMD1(IND) = H6000+I
CMD1(IND+1) = TRACKS(1,LSTTRK)
CMD1(IND+2) = TRACKS(2,LSTTRK)
CMD1(IND+3) = TRACKS(3,LSTTRK)
CMD1(IND+4) = LAST4(1)
CMD1(IND+5) = LAST4(2)
CMD1(IND+6) = LAST4(3)
CMD1(IND+7) = LAST4(4)
IND = IND + 8
6638 CONTINUE
ELSEIF (FILL2) THEN
DO 6639 I = (LSTTRK+1),255
IF (IND.GT.4085) GOTO 11
CMD1(IND) = H6000+I
CMD1(IND+1) = $4000 + THEX0
CMD1(IND+2) = $2800
CMD1(IND+3) = $3000
CMD1(IND+4) = LAST4(1)
CMD1(IND+5) = LAST4(2)
CMD1(IND+6) = LAST4(3)
CMD1(IND+7) = LAST4(4)
IND = IND + 8
6639 CONTINUE
ENDIF
DO 1267 I = IND,4095
ASCAN(I) = 0
1267 CONTINUE
I = IND - 1
SCNWLN = I
TSET = DTIME()
11 CONTINUE
CALL RUNSTQ(ISTAT)
TIME = DTIME()
TIME = TIME - TSET
IF (ISTAT.EQ.0) GOTO 11
IF (TIME.GT.10.0) THEN
PRINT *,' REGRUV: PAR CONTROLLER NOT RESPONDING, TIMED OUT! STAT: ',ISTAT
CALL WAIT(1.5)
RETURN
ELSEIF ((TIME-TSET).GT.3.0) THEN
CALL PARSTQ(ISTAT)
IF (ISTAT.EQ.0) CALL STOPAR
ENDIF
IF (ISTAT.EQ.0) GOTO 11
IF (ISTAT.GT.1.AND.FLAG) THEN
CALL PARSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
IF (ISTAT.EQ.0) CALL STOPAR
ENDIF
CALL TELPAR(CMD1(1),I)
ZVALID = .FALSE.
AVALID = .FALSE.
WHSCAN = 4
RETURN
ENTRY REGRWV
FLAG = .FALSE.
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) GOTO 9003
CALL STOPAR
9000 CONTINUE
TSET = DTIME()
I = SCNQLN
111 CONTINUE
CALL RUNSTQ(ISTAT)
TIME = DTIME()
TIME = TIME - TSET
IF (TIME.GT.10.0) THEN
PRINT *,' REGRUV: PAR CONTROLLER NOT RESPONDING, TIMED OUT! STAT: ',ISTAT
CALL WAIT(1.5)
RETURN
ENDIF
IF (ISTAT.EQ.0) GOTO 111
IF (ISTAT.GT.1.AND.FLAG) THEN
CALL PARSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
IF (ISTAT.EQ.0) CALL STOPAR
ENDIF
CALL TELPAR(ASCAN(1),I)
ZVALID = .FALSE.
AVALID = .FALSE.
WHSCAN = 4
RETURN
ENTRY REQRWV
FLAG = .FALSE.
FILL = .FALSE.
FILL2 = .FALSE.
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) GOTO 9003
CALL RSTPAR
GOTO 9000
ENTRY REQRUV
FLAG = .FALSE.
FILL = .FALSE.
FILL2 = .FALSE.
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) GOTO 9002
CALL RSTPAR
GOTO 9001
9002 CONTINUE
CALL RUNSTA(ISTAT)
FLAG = .TRUE.
GOTO 9001
9003 CONTINUE
CALL RUNSTA(ISTAT)
FLAG = .TRUE.
GOTO 9000
ENTRY REGR00
FILL = .FALSE.
FILL2 = .TRUE.
JKLM = 0
GOTO 9999
ENTRY REQR00
FILL = .FALSE.
FILL2 = .TRUE.
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
CALL RSTPAR
GOTO 9998
ENTRY REQROO
FILL = .TRUE.
FILL2 = .FALSE.
CALL PARSTQ(ISTAT)
CALL RUNSTQ(ISTAT)
IF (ISTAT.GT.1) RETURN
CALL RSTPAR
GOTO 9998
END
*----------------------------------------------------------------------
SUBROUTINE MODTRK(TKSIZE,SPCING)
CHARACTER*20 FRAME,PADS*3,NCRUDQ*1
INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,SENDAT,FLPEEK,INTOF,KADDR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,END
INTEGER*2 TKSIZE*4,SPCING*4,I2H800,I2OR2,LAST4(4),TRACKS(3,0:255)
INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0,ASCAN(7000),SCNQLN
INTEGER*2 IFOO,MASK,I2AND2,L2NOT,MASK2,SMASK,CMASK
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ
LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN
LOGICAL*1 FLAG77(0:24),ISGONG,ISIT,NORMAL
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /PARLS4/LAST4
COMMON /OMASCN/SCNQLN,ASCAN
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NOREAD,ONOFF,
& DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ
SAVE /PARLS4/,/PARSCN/,/OMASCN/,/OMAPAR/,/OMAPR2/,/PARZQX/
EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,KADDR,BLKDS,CALL3
SAVE
NORMAL = .TRUE.
GOTO 9000
ENTRY TRKMOD(TKSIZE,SPCING)
NORMAL = .FALSE.
9000 CONTINUE
CALL CRCLS
PRINT *,' '
PRINT *,' CHANGING TRACK CONTROL DATA FOR SAVED SCAN'
IF (NORMAL) THEN
PRINT *,' '
ELSE
PRINT *,' REVERSED'
ENDIF
I2H800 = $0800
IF (TKSIZE.GT.SPCING) TKSIZE = SPCING
NUMBER = 512/SPCING
IF (NUMBER.GT.256) NUMBER = 256
PRINT *,' THERE SHOULD NOW BE ',NUMBER,' TRACKS'
PRINT *,' SPACED ',SPCING,' PIXELS APART, EACH BEING ',TKSIZE,' PIXELS HIGH'
PRINT *,' '
END = NUMBER - 1
IF (END.LT.0) END = 0
IF (THEX0.LT.0.OR.THEX0.GT.511) THEX0 = 0
DO 1 I = 0,END
TRACKS(1,I) = $4000 + THEX0
TRACKS(3,I) = $3000 + TKSIZE
IF (NORMAL) THEN
TRACKS(2,I) = $2000 + SPCING*I
ELSE
TRACKS(2,I) = $21FF - SPCING*I
ENDIF
1 CONTINUE
* IF (NORMAL) THEN
* IITR = $29FF
* ELSE
* IITR = $2800
* ENDIF
TRACKS(2,END) = I2OR2(TRACKS(2,END),I2H800)
IITR = TRACKS(2,END)
DO 2 I = (END+1),255
TRACKS(1,I) = $4000 + THEX0
TRACKS(2,I) = IITR
TRACKS(3,I) = $3000
2 CONTINUE
LSTTRK = END
11 CONTINUE
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE MODCHL(X0,PIXCHL,NUMCHL)
INTEGER*4 X0,PIXCHL,NUMCHL
CALL CHLMOD(X0,PIXCHL,NUMCHL,0,0)
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE CHLMOD(X0,PIXCHL,NUMCHL,DWELL1,DWELL2)
CHARACTER*20 FRAME,PADS*3,NCRUDQ*1
INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,SENDAT,FLPEEK,INTOF,KADDR
INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,X0,NUMCHL,PIXCHL,DWELL1
INTEGER*4 DWELL2,END,BEG,END2,BEG2
INTEGER*2 I2H800,I2OR2,LAST4(4),TRACKS(3,0:255)
INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0,ASCAN(7000),SCNQLN
INTEGER*2 IFOO,MASK,I2AND2,L2NOT,MASK2,SMASK,CMASK
INTEGER*2 CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ
LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN
LOGICAL*2 CATHV2,FRCV2N,FRCV2F
LOGICAL*1 FLAG77(0:24),ISGONG,ISIT
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /PARLS4/LAST4
COMMON /OMASCN/SCNQLN,ASCAN,/OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512
COMMON /PARZQX/DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN,DIDIT,EOT,NOREAD,ONOFF,
& DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ
SAVE /PARLS4/,/PARSCN/,/OMASCN/,/OMAPAR/,/OMAPR2/,/PARZQX/
EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,KADDR,BLKDS,CALL3
CALL CRCLS
PRINT *,' '
PRINT *,' CHANGING CHANNEL CONTROL DATA FOR SAVED SCAN'
PRINT *,' '
I2H800 = $0800
IF (PIXCHL.LE.0) PIXCHL = 1
IF (NUMCHL.LE.0) NUMCHL = 500
9999 CONTINUE
IF ((PIXCHL*NUMCHL).GT.510) THEN
I = (NUMCHL + 500/PIXCHL)/2
PIXCHL = (PIXCHL + 500/NUMCHL)/2
NUMCHL = I
IF ((PIXCHL*NUMCHL).GT.600) GOTO 9999
PIXCHL = 507/NUMCHL
ENDIF
END = 509
BEG = 510 - PIXCHL*NUMCHL
GOTO 9998
ENTRY CHLM0D(X0,PIXCHL,NUMCHL,DWELL1,DWELL2,BEG2,END2)
IF (PIXCHL.LE.0) PIXCHL = 1
IF (PIXCHL.GE.500.OR.PIXCHL.LE.0) PIXCHL = 500
IF (END2.EQ.0) END2 = 509
END = MAX(END2,BEG2)
BEG = MIN(END2,BEG2)
END = MIN(END,509)
BEG = MAX(BEG,0)
BEG2 = BEG
NUMCHL = (END-BEG+1)/PIXCHL
END = BEG + PIXCHL*(NUMCHL-1)
END2 = END
9998 IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
IF (DWELL1.LT.0.OR.DWELL1.GT.7) DWELL1 = 0
IF (DWELL2.LT.0.OR.DWELL2.GT.7) DWELL2 = DWELL1
NUMBER = NUMCHL
PRINT *,' THERE SHOULD NOW BE ',NUMBER,' CHANNELS'
PRINT *,' EACH BEING ',PIXCHL,' PIXELS WIDE'
PRINT *,' from ',BEG,' to ',END
IF (CATHV2) THEN
CHNULL = $1240
CHNORM = $1040
CHSUPP = $1250
CHFLAG = $1640
CHLAST = $1248
ELSE
CHNULL = $1200
CHNORM = $1000
CHSUPP = $1210
CHFLAG = $1600
CHLAST = $1208
ENDIF
DO 1 I = 0,(BEG-1)
CHNLS(I) = CHNULL + DWELL2
1 CONTINUE
IF (DWELL2.EQ.0) CHNLS(0) = CHNLS(0) + 1
DO 2 I = BEG,END
CHNLS(I) = CHSUPP + DWELL2
J = I - BEG + 1
J = MOD(J,PIXCHL)
IF (J.EQ.0) CHNLS(I) = CHNORM + DWELL1
2 CONTINUE
DO 3 I = END+1,509
CHNLS(I) = CHNULL + DWELL2
3 CONTINUE
CHNLS(510) = CHFLAG + DWELL2
CHNLS(511) = CHLAST + DWELL2
LSTCHL = 511
LAST4(1) = 510
LAST4(2) = CHNLS(510)
LAST4(3) = 511
LAST4(4) = CHNLS(511)
11 CONTINUE
IF (X0.NE.THEX0) THEN
THEX0 = X0
IF (THEX0.LT.0.OR.THEX0.GT.511) THEX0 = 0
X0 = THEX0
CALL RSETTR
ELSE
CALL FLLSCN
ENDIF
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE RSETTR
INTEGER*4 END
INTEGER*2 ASCAN(7000),SCNQLN,LAST4(4)
INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /OMASCN/SCNQLN,ASCAN,/PARLS4/LAST4
SAVE /PARLS4/,/PARSCN/,/OMASCN/
IF (THEX0.LT.0.OR.THEX0.GT.511) THEX0 = 0
PRINT *,'RESETTING TRACKS FOR NEW X0 = ',THEX0
DO 1 I = 0,255
TRACKS(1,I) = $4000 + THEX0
1 CONTINUE
CALL FLLSCN
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE FLLSCN
INTEGER*2 LAST4(4),I2H800,TRACKS(3,0:255),ASCAN(7000),SCNQLN
INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0,I2OR2,I2AND2
INTEGER*2 CMDS(8,0:511),CMD4(4,0:1023),CMD2(2,0:2047),CMD1(0:4095)
INTEGER*2 CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP,H0040,HFF3F,L
LOGICAL*2 CATHV2,FRCV2N,FRCV2F
EQUIVALENCE (CMDS(1,0),CMD4(1,0),CMD2(1,0),CMD1(0))
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /PARLS4/LAST4,/PARCDA/CMDS,/OMASCN/SCNQLN,ASCAN
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
SAVE /PARLS4/,/PARSCN/,/PARCDA/,/OMASCN/,/OMASAT/
EXTERNAL I2OR2,I2AND2
SAVE
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
H6000 = $6000
I2H800 = $0800
H0040 = 0
HFF3F = $FFFF
IF (FRCV2N.OR.CATHV2) H0040 = $0040
IF (FRCV2F) HFF3F = $FF3F
DO 5536 I = 1,4
L = I2AND2(LAST4(I),HFF3F)
LAST4(I) = I2OR2(L,H0040)
5536 CONTINUE
ASCAN(1) = H6000
ASCAN(2) = TRACKS(1,0)
ASCAN(3) = TRACKS(2,0)
ASCAN(4) = TRACKS(3,0)
IND = 5
DO 5537 I = 0,LSTCHL
ASCAN(IND) = I
L = I2AND2(CHNLS(I),HFF3F)
CHNLS(I) = I2OR2(L,H0040)
ASCAN(IND+1) = CHNLS(I)
IND = IND + 2
5537 CONTINUE
IF (LSTTRK.GT.255) LSTTRK = 255
IF (LSTTRK.LT.0) LSTTRK = 0
DO 5538 I = 1,(LSTTRK-1)
ASCAN(IND) = H6000+I
ASCAN(IND+1) = TRACKS(1,I)
ASCAN(IND+2) = TRACKS(2,I)
ASCAN(IND+3) = TRACKS(3,I)
ASCAN(IND+4) = LAST4(1)
ASCAN(IND+5) = LAST4(2)
ASCAN(IND+6) = LAST4(3)
ASCAN(IND+7) = LAST4(4)
IND = IND + 8
5538 CONTINUE
SCNQLN = IND - 1
IF (LSTTRK.EQ.0) RETURN
I = LSTTRK
ASCAN(IND) = H6000+I
ASCAN(IND+1) = TRACKS(1,I)
I2H800 = $0800
ASCAN(IND+2) = I2OR2(TRACKS(2,I),I2H800)
TRACKS(2,I) = ASCAN(IND+2)
ASCAN(IND+3) = TRACKS(3,I)
ASCAN(IND+4) = LAST4(1)
ASCAN(IND+5) = LAST4(2)
ASCAN(IND+6) = LAST4(3)
ASCAN(IND+7) = LAST4(4)
SCNQLN = IND + 7
IND = IND + 8
ASCAN(IND) = $0D000
SCNQLN = IND
DO 1267 I = (IND+1),4096
ASCAN(I) = 0
1267 CONTINUE
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE NTRSCN
CHARACTER PFNFOO*18,FRAME*20
INTEGER*4 UNITNO,LENRQX,I,J,IOADDR,IXLEN,IYLEN,SENBAS,SENDAT
INTEGER*4 TRKCNT,CHLCNT
INTEGER*2 LAST4(4),I2AND2,I2OR2,I2EOR2,HF000,HFFF8,H00FF,HFF38,HFF3F,H0040
INTEGER*2 L,LL,PREAD2,ERROR,TRACKS(3,0:255),ASCAN(7000),SCNQLN
INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0
INTEGER*2 CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
INTEGER*1 PFFOO(18)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY
LOGICAL*2 LINE,CATHV2,FRCV2N,FRCV2F
EQUIVALENCE (PFNFOO,PFFOO(1)),(CHNLS(0),CHLS(0))
COMMON /PQQXXR/UNITNO,LENRQX,IOADDR,PFNFOO
COMMON /OMAPAR/IXLEN,IYLEN,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /PSYNCH/LINE,/PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /PARLS4/LAST4,/OMASCN/SCNQLN,ASCAN
SAVE /OMAPAR/,/PQQXXR/,/PSYNCH/,/PARSCN/,/PARLS4/,/OMASCN/,/OMASAT/
EXTERNAL I2OR2,I2AND2,I2EOR2
SAVE
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
H0040 = 0
HFF3F = $FFFF
CHNORM = $1000
IF (FRCV2N.OR.CATHV2) THEN
H0040 = $0040
CHNORM = $1040
ENDIF
IF (FRCV2F) HFF3F = $FF3F
HF000 = $F000
HFFF8 = $FFF8
HFF38 = $FF38
H00FF = $00FF
TRKCNT = 0
CHLCNT = 0
DO 1 I = 1,SCNQLN+1
J = I
LASTL = L
L = ASCAN(I)
IF (L.GE.0.AND.L.LE.511) GOTO 1001
IF (LASTL.GE.0.AND.LASTL.LE.511) THEN
CHLCNT = LASTL
LL = I2AND2(L,HFF3F)
L = I2OR2(LL,H0040)
ASCAN(I) = L
CHNLS(CHLCNT) = L
ENDIF
7 CONTINUE
LL = L
ML = I2AND2(LL,HFF38)
IF (ML.EQ.$1208) THEN
LAST4(3) = LASTL
LSTCHL = LASTL
LAST4(4) = L
GOTO 1001
ELSEIF (ML.EQ.$1600) THEN
LAST4(1) = LASTL
LSTCHL = LASTL + 1
LAST4(2) = L
GOTO 1001
ELSEIF (ML.EQ.$1608) THEN
LAST4(1) = LASTL
LSTCHL = LASTL
LAST4(2) = L
LAST4(3) = LASTL
LAST4(4) = L
GOTO 1001
ENDIF
ML = I2AND2(LL,HF000)
IF (ML.EQ.$6000) THEN
TRKCNT = I2AND2(LL,H00FF)
GOTO 1001
ELSEIF (ML.EQ.$2000) THEN
TRACKS(2,TRKCNT) = L
GOTO 1001
ELSEIF (ML.EQ.$3000) THEN
TRACKS(3,TRKCNT) = L
GOTO 1001
ELSEIF (ML.EQ.$4000) THEN
TRACKS(1,TRKCNT) = L
GOTO 1001
ENDIF
IF ((L.GE.$D000.AND.L.LE.$E000).OR.(L.GE.-12288.AND.L.LE.-8192)) GOTO 2
1001 CONTINUE
1 CONTINUE
2 CONTINUE
LENRQX = J
LSTCHL = CHLCNT
DO 1111 I = CHLCNT+1,511
CHNLS(I) = CHNORM
1111 CONTINUE
LSTTRK = TRKCNT
RETURN
END
*----------------------------------------------------------------------
SUBROUTINE GETSCN(FNAME)
CHARACTER FNAME*(*),FNAME2*24,PFNFOO*18,FRAME*20
INTEGER*4 UNITNO,LENRQX,I,J,IOADDR,TRKCNT,CHLCNT
INTEGER*4 IXLEN,IYLEN,SENBAS,SENDAT
INTEGER*2 LAST4(4),I2AND2,I2OR2,I2EOR2,HF000,HFFF8,H00FF,HFF38
INTEGER*2 ASCAN(7000),SCNQLN,PREAD2,ERROR,L,LL,TRACKS(3,0:255)
INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0
INTEGER*2 CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
INTEGER*1 PFFOO(18)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,DOSCAN
LOGICAL*2 LINE,CATHV2,FRCV2N,FRCV2F
EQUIVALENCE (PFNFOO,PFFOO(1)),(CHNLS(0),CHLS(0))
COMMON /PQQXXR/UNITNO,LENRQX,IOADDR,PFNFOO
COMMON /OMAPAR/IXLEN,IYLEN,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /PSYNCH/LINE,/PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /PARLS4/LAST4,/OMASCN/SCNQLN,ASCAN,/OMADIT/DOSCAN
SAVE /OMAPAR/,/PQQXXR/,/PSYNCH/,/PARSCN/,/PARLS4/,/OMASCN/,/OMADIT/,/OMASAT/
EXTERNAL I2AND2,I2OR2,I2EOR2
SAVE
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
H0040 = 0
HFF3F = $FFFF
IF (FRCV2N.OR.CATHV2) H0040 = $0040
IF (FRCV2F) HFF3F = $FF3F
HF000 = $F000
HFFF8 = $FFF8
HFF38 = $FF38
H00FF = $00FF
SCNQLN = 1
ITRIES = 0
CALL FNCHCK(FNAME,'PAR',FNAME2)
12 CONTINUE
ITRIES = ITRIES + 1
IF (ITRIES.GE.5) THEN
J = 0
GOTO 2
ENDIF
OPEN (UNIT=10,FILE=FNAME2,FORM='BINARY',STATUS='OLD',ERR=12)
CALL REWIND(10)
DO 1 I = 1,4096
J = I
LASTL = L
READ (UNIT=10,ERR=3,END=2) L
7 CONTINUE
LL = I2AND2(HF000,L)
LL = I2EOR2(LL,$1000)
IF (LL.EQ.0) THEN
LL = I2AND2(L,HFF3F)
L = I2OR2(LL,H0040)
ENDIF
ASCAN(I) = L
IF ((L.GE.$D000.AND.L.LE.$E000).OR.(L.GE.-12288.AND.L.LE.-8192)) GOTO 2
1001 CONTINUE
1 CONTINUE
2 CONTINUE
SCNQLN = J
DO 111 I = (J+1),4096
ASCAN(I) = 0
111 CONTINUE
112 CONTINUE
IF (DOSCAN) THEN
CALL NTRSCN
ENDIF
RETURN
3 CONTINUE
WRITE (11,'(A,I3)',ERR=4) 'GETSCN: ERROR READING UNIT = ',UNITNO
4 PRINT *,'GETSCN: ERROR READING UNIT = ',UNITNO
J = J - 1
GOTO 2
END
*----------------------------------------------------------------------
SUBROUTINE SAVSCN(FNAME)
CHARACTER FNAME*(*),FNAME2*24,PFNFOO*18,FRAME*20
INTEGER*4 UNITNO,LENRQX,I,J,IOADDR,IXLEN,IYLEN,SENBAS,SENDAT
INTEGER*4 TRKCNT,CHLCNT
INTEGER*2 TRACKS(3,0:255),CHNLS(0:511),CHLS(0:511),THEX0,L,LL
INTEGER*2 PREAD2,ERROR,LAST4(4),I2AND2,I2OR2,I2EOR2
* INTEGER*2 HF000,HFFF8,H00FF,HFF38
INTEGER*2 ASCAN(7000),SCNQLN,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
INTEGER*1 PFFOO(18)
LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,DOSCAN
LOGICAL*2 LINE,CATHV2,FRCV2N,FRCV2F
EQUIVALENCE (PFNFOO,PFFOO(1))
EQUIVALENCE (CHNLS(0),CHLS(0))
COMMON /PQQXXR/UNITNO,LENRQX,IOADDR,PFNFOO
COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0
COMMON /OMAPAR/IXLEN,IYLEN,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY,IA128,SENBAS,SENDAT
COMMON /OMASAT/CATHV2,FRCV2N,FRCV2F,CHLAST,CHNULL,CHNORM,CHFLAG,CHSUPP
COMMON /OMASCN/SCNQLN,ASCAN,/OMADIT/DOSCAN,/PSYNCH/LINE,/PARLS4/LAST4
SAVE /OMAPAR/,/PQQXXR/,/PSYNCH/,/PARSCN/,/PARLS4/,/OMASCN/,/OMADIT/,/OMASAT/
EXTERNAL I2AND2,I2OR2,I2EOR2
SAVE
IF (DOSCAN) THEN
CALL FLLSCN
ENDIF
ENTRY SVESCN(FNAME)
9999 CONTINUE
IF (FRCV2N.AND.FRCV2F) FRCV2F = .FALSE.
CATHV2 = (CATHV2 .OR. FRCV2N) .AND. (.NOT.FRCV2F)
* H0040 = 0
* HFF3F = $FFFF
* IF (FRCV2N.OR.CATHV2) H0040 = $0040
* IF (FRCV2F) HFF3F = $FF3F
* HF000 = $F000
* HFFF8 = $FFF8
* HFF38 = $FF38
* H00FF = $00FF
ITRIES = 0
CALL FNCHCK(FNAME,'PAR',FNAME2)
FNAME = FNAME2
12 CONTINUE
ITRIES = ITRIES + 1
IF (ITRIES.GE.5) THEN
GOTO 22
ENDIF
OPEN (UNIT=10,FILE=FNAME2,FORM='BINARY',STATUS='OLD',ERR=112)
112 IF (ITRIES.LE.2) CALL UNPROT(FNAME)
OPEN (UNIT=10,FILE=FNAME2,FORM='BINARY',STATUS='NEW',ERR=12)
ITRIES = 0
1212 CALL REWIND(10)
ITRIES = ITRIES + 1
IF (SCNQLN.LE.1024) SCNQLN = 4095
WRITE (UNIT=10,ERR=3) (ASCAN(I),I=1,SCNQLN+1)
2 CONTINUE
15 CLOSE (UNIT=10,STATUS='KEEP',ERR=5)
5 RETURN
3 CONTINUE
WRITE (11,'(A,I3)',ERR=4) 'GETSCN: ERROR WRITING UNIT = ',UNITNO
4 PRINT *,'GETSCN: ERROR WRITING UNIT = ',UNITNO
IF (ITRIES.LE.5) GOTO 1212
GOTO 2
22 CONTINUE
WRITE (11,'(A,I3)',ERR=14) 'GETSCN: ERROR OPENING UNIT = ',UNITNO
14 PRINT *,'GETSCN: ERROR OPENING UNIT = ',UNITNO
ITRIES = 0
GOTO 1212
ENTRY SVFSCN(FNAME)
CALL FLLSCN
GOTO 9999
END

You might also like