Sie sind auf Seite 1von 33

******************************************************************************* * 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 and * * MORFROP.ASM. 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 TSTPAR *compiler is directed to place object code in segment TSTPAR * *-----------------------------------------------------------------------------* $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 TSTPAR * * SUBROUTINE CLTST * *-----------------------------------------------------------------------------* * SUBROUTINE DOBUFS * * ENTRY REDOBF * * ENTRY BFREDO(ILENFR) * * ENTRY REALOC * * ENTRY REAL0C(MMMARK) * *-----------------------------------------------------------------------------* * INTEGER*4 FUNCTION PASCRL(A128,IJKLI) * *-----------------------------------------------------------------------------* * SUBROUTINE BEFBLK(IX,IY) * *=============================================================================* *SEGMENT MORPAR * * SUBROUTINE PARHLP * *-----------------------------------------------------------------------------* * INTEGER*4 FUNCTION PARARG(A128,WASOFF) * *-----------------------------------------------------------------------------* * SUBROUTINE LDTBLS(ASNTBL,SQRTBL,MARK) * ******************************************************************************* *---------------------------------------------------------------------$NODEBUG SUBROUTINE CLTST CHARACTER*8 HEXOF,HAVAIL,HAPS(32) CHARACTER*2 CRLINE*72,PROGNM*18,MAINLN*54,CRKEY*12 REAL CONTRS,BRIGHT INTEGER*4 HOWMCH,ALLOC,GETBUF,IAPS(32),MAGNIF,LLHILO INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,APSCR1,APSCR2,APSCR3 INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,AFMTYP,SCRMRK,APS(0:7) INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,LNS(0:7),LENS(32) INTEGER*2 NARG,TYPS(32),LENXS(32),LENYS(32),FNRNSN(32) LOGICAL*4 DOCR,REPEAT LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,PAUSES,CONFRM,BUFGUD(32),BUFUSE(32) LOGICAL*1 CBLNRM,CBLINV EQUIVALENCE (APS(0),APMAIN),(APS(1),AP1),(APS(2),AP2),(APS(3),AP3)

EQUIVALENCE (APS(4),AP4),(APS(5),AP5),(APS(6),APZR),(APS(7),APMX) EQUIVALENCE (LNS(0),LNMAIN),(LNS(1),LN1),(LNS(2),LN2),(LNS(3),LN3) EQUIVALENCE (LNS(4),LN4),(LNS(5),LN5),(LNS(6),LNZR),(LNS(7),LNMX) EQUIVALENCE (IA,IAPS(1)),(IA2,IAPS(2)),(IA4,IAPS(3)),(IZ,IZR,IAPS(4)) EQUIVALENCE (IMX,IAPS(5)),(IT,IAPS(6)),(IA1,IAPS(7)),(IA3,IAPS(8)) EQUIVALENCE (IA5,IAPS(9)),(ISC1,IAPS(10)),(ISC2,IAPS(11)),(ISC3,IAPS(12)) COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR NSN COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/PAWS/PAUSES,/CNFRM/CONFRM COMMON /NAMEPR/PROGNM,MAINLN,/GNORF9/CRKEY,CRLINE,DOCR COMMON /BLKCNV/MAGNIF,LLHILO,CONTRS,BRIGHT,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512 COMMON /OMABFL/BUFGUD,BUFUSE,/PARCBL/CBLNRM,CBLINV SAVE /NAMEPR/,/GNORF9/,/BLKCNV/,/BLKLIM/,/OMAPR2/,/PAWS/,/CNFRM/ SAVE /ZEROS/,/AMPLS/,/OMABFR/,/OMACNT/,/OMABFL/,/PARCBL/ INTEGER*4 PACOMM EXTERNAL PACOMM,TSTPR2,TRPSON,DOBUFS,INITLB SAVE CBLNRM = CBLNRM .AND. (.NOT.CBLINV) CBLINV = CBLINV .OR. (.NOT.CBLNRM) CALL OPESCR CALL OPEPPU CALL INIOMA ZVALID = .FALSE. AVALID = .FALSE. CALL CLCINT CALL GOTOXY(0,0) CALL CLS PRINT *,' ' PRINT *,' Beginning buffer allocations ...' PRINT *,' ' CALL DOBUFS I128 = APMAIN I256 = APMAIN I512 = APMAIN PRINT *,' ' PRINT *,' There is limited on-line help: type ? in main command loop.' PRINT *,' ' PRINT *,' ' PRINT *,' INITIALIZING ... ' PRINT *,' ' NUMARG = NARG() IF (NUMARG.LT.2) CALL INITFI CALL BLK3X3 CALL TRPSON REPEAT = .FALSE. MAGNIF = 17 NMAG = 17 CONTRS = 0.0 CNTRS = 0.0 BRIGHT = 0.0 BRGHT = 0.0 CALL USEPG1 CALL PLTTRM CALL GRINIT CALL USEPG0 CALL PLTTRM CALL GRINIT

* * *

PAUSES = .FALSE. CONFRM = .TRUE. CALL INITLB * CALL INTSCO * CALL HELLO CALL OPEBUS CALL RESCRN DOCR = .TRUE. CRKEY = 'cOPYrIGHT@@@' CRLINE = '1984-89 Kevin G. Rhoads & High Voltage Research Lab @ MIT.' * MAINLN = 'PAR/OMA DATA ACQUISITION PROGRAM .' MAINLN = 'Kerr Image Analysis System ' CALL CALL3(TSTPR2,I128,I256,I512) END *---------------------------------------------------------------------SUBROUTINE DOBUFS CHARACTER*8 THEHEX,HX2,TH0,TH00,TH000,HEXOF,HAVAIL,HAPS(32),FRAME*20 INTEGER*4 HOWMCH,ALLOC,GETBUF,IAPS(32),MARK,LENFR,LENTR,NTR,RESERV INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,APSCR1,APSCR2,APSCR3 INTEGER*4 APMAIN,AP1,AP2,AP3,AP4,AP5,APZR,APMX,AFMTYP,SCRMRK,APS(0:7) INTEGER*4 LNMAIN,LN1,LN2,LN3,LN4,LN5,LNZR,LNMX,LNS(0:7),LENS(32) INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,SENBAS,SENDAT,ASNTAB,SQRTA B INTEGER*4 LASTXX INTEGER*2 TYPS(32),LENXS(32),LENYS(32),FNRNSN(32) LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,CHKADI,CHKADR LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,BUFGUD(32),BUFUSE(32) LOGICAL*1 GEZAP,CBLNRM,CBLINV,QSAVE 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)) COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY, IA128,SENBAS,SENDAT COMMON /ZEROS/ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARCBL/CBLNRM,CBLINV COMMON /AMPLS/AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP,/BEGADR/LASTXX COMMON /OMABFR/APS,LNS,/OMACNT/IAPS,HAPS,LENS,/OMATYP/TYPS,LENXS,LENYS,FNR NSN COMMON /OMASCR/SCRMRK,APSCR1,APSCR2,APSCR3,/CNVTBL/ASNTAB,SQRTAB COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512 COMMON /OMABFL/BUFGUD,BUFUSE,/FRAMNG/LENFR,LENTR,NTR SAVE /OMAPAR/,/OMASCR/,/OMAPR2/,/OMABFL/,/ZEROS/,/AMPLS/,/CNVTAB/ SAVE /OMABFR/,/OMACNT/,/DATBEG/,MARK,MLENFR,RESERV EXTERNAL CALL3,LDTBLS,CHKADI,CHKADR SAVE DATA MLENFR/0/,RESERV/$4000/ * AACORR = .FALSE. ZZCORR = .FALSE. 9999 CONTINUE GEZAP = .TRUE. QSAVE = .FALSE. 9777 CONTINUE CBLNRM = CBLNRM .AND. (.NOT.CBLINV) CBLINV = CBLINV .OR. (.NOT.CBLNRM) MARK = ALLOC(0) ZVALID = .FALSE.

AVALID = .FALSE. DO 1133 I = 1,32 BUFGUD(I) = .FALSE. BUFUSE(I) = .FALSE. IAPS(I) = 0 LENS(I) = 0 IF (.NOT.QSAVE) THEN LENXS(I) = 0 LENYS(I) = 0 FNRNSN(I) = 0 ENDIF 1133 CONTINUE IAVAIL = HOWMCH() - RESERV HAVAIL = HEXOF(IAVAIL) PRINT *,' ' PRINT *,'INITIAL MEMORY AVAILABLE (bytes) = ',HAVAIL,' = ',IAVAIL I0 = ALLOC(0) LASTXX = I0 TH0 = HEXOF(I0) PRINT *,' Beginning of Heap is: $',TH0 AP1 = 0 AP2 = 0 AP3 = 0 AP4 = 0 AP5 = 0 LN1 = 0 LN2 = 0 LN3 = 0 LN4 = 0 LN5 = 0 APSCR1 = 0 APSCR2 = 0 APSCR3 = 0 ZLEN = 0 ALEN = 0 APOINT = 0 * IF (IAVAIL.LT.$30000) THEN * CALL CRCLS * CALL GOTOXY(0,10) * PRINT *,' 64K Dynamic Ram Chips ARE Cheap!! ' * PRINT *,' I particularly like the ==> 120 or 150 NanoSec 4164''s ' * PRINT *,' ' * PRINT *,' If you buy a 256K board from IBM, you can fill it to ' * PRINT *,' a FULL MegaByte for under $100 ' * PRINT *,' ' * PRINT *,' THINK ABOUT IT ... ' * PRINT *,' YOU COULD MAKE SOME COMPUTER VERY HAPPY' * PRINT *,' ' * IF (IAVAIL.LT.$10000) THEN * PRINT *,' ' * PRINT *,' REMEMBER: 150NS 4164 Dynamic Ram Chips, less than $20 f or 18 chips!' * CALL WAIT(7.0) * ENDIF * CALL WAIT(0.5) * ENDIF IF (IAVAIL.LT.$10200) THEN LNMAIN = IAVAIL - $400 IF (LNMAIN.LE.0) RETURN APMAIN = ALLOC(LNMAIN)

ZMARK = ALLOC(0) ZPOINT = ZMARK AMARK = ZMARK ELSEIF (IAVAIL.GE.$10200.AND.IAVAIL.LT.$18200) APMAIN = ALLOC(65536) LNMAIN = 65536 ZMARK = ALLOC(0) ZPOINT = ZMARK AMARK = ZMARK ELSEIF (IAVAIL.LT.$20200.AND.IAVAIL.GE.$18200) APMAIN = ALLOC(98304) LNMAIN = 98304 ZMARK = ALLOC(0) ZPOINT = ZMARK AMARK = ZMARK ELSEIF (IAVAIL.LT.$30200.AND.IAVAIL.GE.$20200) APMAIN = ALLOC(131072) LNMAIN = 131072 AP1 = APMAIN + 32768 LN1 = 32768 AP2 = APMAIN + 65536 LN2 = 65536 AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 AP5 = AP3 ZMARK = ALLOC(0) ZPOINT = ZMARK AMARK = ZMARK ELSEIF (IAVAIL.LT.$40200.AND.IAVAIL.GE.$30200) APMAIN = ALLOC(131072) LNMAIN = 131072 AP1 = APMAIN + 32768 LN1 = 32768 AP2 = APMAIN + 65536 LN2 = 65536 AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 AP5 = AP3 ZMARK = ALLOC(0) ZPOINT = ZMARK AMARK = ZMARK ELSEIF (IAVAIL.LT.$50200.AND.IAVAIL.GE.$40200) APMAIN = ALLOC(131072) LNMAIN = 131072 AP1 = APMAIN + 32768 LN1 = 32768 AP2 = APMAIN + 65536 LN2 = 65536 AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 AP5 = AP3 ZLEN = 65536 ZPOINT = ALLOC(65536) ZMARK = ZPOINT AMARK = ALLOC(0) ELSEIF (IAVAIL.LT.$60200.AND.IAVAIL.GE.$50200) APMAIN = ALLOC(196608)

THEN

THEN

THEN

THEN

THEN

THEN

LNMAIN = 196608 AP1 = APMAIN + 32768 LN1 = 32768 AP2 = APMAIN + 65536 LN2 = 65536 AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 + 65536 LN4 = 65536 AP5 = AP4 + 32768 LN5 = 32768 ZLEN = 65536 ZPOINT = ALLOC(65536) ZMARK = ZPOINT AMARK = ALLOC(0) ELSEIF (IAVAIL.LT.$70200.AND.IAVAIL.GE.$60200) THEN APMAIN = ALLOC(196608) LNMAIN = 196608 AP1 = APMAIN + 32768 LN1 = 32768 AP2 = APMAIN + 65536 LN2 = 65536 AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 + 65536 LN4 = 65536 AP5 = AP4 + 32768 LN5 = 32768 ZLEN = 65536 ALEN = ZLEN ZPOINT = ALLOC(65536) ZMARK = ZPOINT APOINT = ALLOC(65536) AMARK = APOINT ELSEIF (IAVAIL.LT.$80200.AND.IAVAIL.GE.$70200) THEN APMAIN = ALLOC(262144) LNMAIN = 262144 AP1 = APMAIN + 65536 LN1 = 65536 AP2 = APMAIN + 131072 LN2 = 131072 AP3 = AP2 + 65536 LN3 = 65536 AP4 = AP2 + 65536 LN4 = 65536 AP5 = AP4 + 32768 LN5 = 32768 ZLEN = 65536 ALEN = ZLEN ZPOINT = ALLOC(65536) ZMARK = ZPOINT APOINT = ALLOC(65536) AMARK = APOINT ELSEIF (IAVAIL.LT.$90200.AND.IAVAIL.GE.$80200) THEN APMAIN = ALLOC(262144) LNMAIN = 262144 AP1 = APMAIN + 65536 LN1 = 65536 AP2 = APMAIN + 131072 LN2 = 131072

AP3 = AP2 + 32768 LN3 = 32768 AP4 = AP2 + 65536 LN4 = 65536 AP5 = AP4 + 32768 LN5 = 32768 ZLEN = 98304 ALEN = ZLEN ZPOINT = ALLOC(98304) ZMARK = ZPOINT APOINT = ALLOC(98304) AMARK = APOINT ELSEIF (IAVAIL.LT.$A0200.AND.IAVAIL.GE.$90200) THEN APMAIN = ALLOC(393216) LNMAIN = 393216 AP1 = APMAIN + 65536 LN1 = 65536 AP2 = APMAIN + 131072 LN2 = 131072 AP3 = AP2 + 65536 LN3 = 65536 AP4 = AP2 + 131072 LN4 = 131072 AP5 = AP4 + 65536 LN5 = 65536 ZLEN = 65536 ALEN = ZLEN ZPOINT = ALLOC(65536) ZMARK = ZPOINT APOINT = ALLOC(65536) AMARK = APOINT ELSEIF (IAVAIL.LT.$B0200.AND.IAVAIL.GE.$A0200) THEN APMAIN = ALLOC(393216) LNMAIN = 393216 AP1 = APMAIN + 65536 LN1 = 65536 AP2 = APMAIN + 131072 LN2 = 131072 AP3 = AP2 + 65536 LN3 = 65536 AP4 = AP2 + 131072 LN4 = 131072 AP5 = AP4 + 65536 LN5 = 65536 ZLEN = 98304 ALEN = ZLEN ZPOINT = ALLOC(98304) ZMARK = ZPOINT APOINT = ALLOC(98304) AMARK = APOINT ELSEIF (IAVAIL.LT.$C0200.AND.IAVAIL.GE.$B0200) THEN APMAIN = ALLOC(393216) LNMAIN = 393216 AP1 = APMAIN + 65536 LN1 = 65536 AP2 = APMAIN + 131072 LN2 = 131072 AP3 = AP2 + 65536 LN3 = 65536 AP4 = AP2 + 131072

LN4 = 131072 AP5 = AP4 + 65536 LN5 = 65536 ZLEN = 131072 ALEN = ZLEN ZPOINT = ALLOC(131072) ZMARK = ZPOINT APOINT = ALLOC(131072) AMARK = APOINT ELSEIF (IAVAIL.LT.$D0200.AND.IAVAIL.GE.$C0200) THEN APMAIN = ALLOC(524288) LNMAIN = 524288 ZLEN = 98304 ALEN = ZLEN ZPOINT = ALLOC(98304) ZMARK = ZPOINT APOINT = ALLOC(98304) AMARK = APOINT ELSEIF (IAVAIL.LT.$F0200.AND.IAVAIL.GE.$D0200) THEN APMAIN = ALLOC(524288) LNMAIN = 524288 ZLEN = 131072 ALEN = ZLEN ZPOINT = ALLOC(131072) ZMARK = ZPOINT APOINT = ALLOC(131072) AMARK = APOINT ELSEIF (IAVAIL.LT.$F0200.AND.IAVAIL.GE.$E0200) THEN APMAIN = ALLOC(655360) LNMAIN = 655360 ZLEN = 98304 ALEN = ZLEN ZPOINT = ALLOC(98304) ZMARK = ZPOINT AMARK = ALLOC(0) APOINT = ALLOC(98304) ELSEIF (IAVAIL.LT.$110200.AND.IAVAIL.GE.$F0200) THEN APMAIN = ALLOC(655360) LNMAIN = 655360 ZLEN = 131072 ALEN = ZLEN ZPOINT = ALLOC(131072) ZMARK = ZPOINT APOINT = ALLOC(131072) AMARK = APOINT ELSEIF (IAVAIL.LT.$120200.AND.IAVAIL.GE.$110200) THEN APMAIN = ALLOC(786432) LNMAIN = 786432 ZLEN = 131072 ALEN = ZLEN ZPOINT = ALLOC(131072) ZMARK = ZPOINT APOINT = ALLOC(131072) AMARK = APOINT ELSE APMAIN = ALLOC(786432) LNMAIN = 786432 ZLEN = 171024 ALEN = ZLEN ZPOINT = ALLOC(171024)

ZMARK = ZPOINT APOINT = ALLOC(171024) AMARK = APOINT ENDIF IAPS(1) = APMAIN IAPS(2) = AP2 IAPS(3) = AP4 IAPS(7) = AP1 IAPS(8) = AP3 IAPS(9) = AP5 LENS(1) = LNMAIN LENS(2) = LN2 LENS(3) = LN4 LENS(7) = LN1 LENS(8) = LN3 LENS(9) = LN5 IF (LNMAIN.GE.$C0000) THEN PRINT *,'EXTENDED BUFFER, ',LNMAIN,' bytes, HAS BEEN ALLOCATED. This is' PRINT *,'sufficient for all operations.' BUFGUD(1) = .TRUE. BUFUSE(1) = .TRUE. ELSEIF (LNMAIN.GE.$20000.AND.LNMAIN.LT.$C0000) THEN PRINT *,'BUFFER, ',LNMAIN,' bytes, HAS BEEN ALLOCATED. This is' PRINT *,'sufficient for BASIC operations. ' BUFGUD(1) = .TRUE. BUFUSE(1) = .TRUE. ELSEIF (LNMAIN.LT.$20000) THEN PRINT *,'BUFFER, ',LNMAIN,' bytes, HAS BEEN ALLOCATED. This is' PRINT *,'marginal in size, and may not be sufficient.' BUFGUD(1) = .TRUE. BUFUSE(1) = LNMAIN.GT.65535 ENDIF IBFEND = APMAIN + LNMAIN IA128 = APMAIN IA256 = APMAIN IA512 = APMAIN IF (LNMAIN.GE.524288) THEN IAPS(13) = APMAIN + 65536 LENS(13) = 65536 BUFGUD(13) = .TRUE. AP1 = APMAIN + 131072 BUFGUD(7) = .TRUE. LN1 = 131072 AP2 = APMAIN + 262144 LN2 = IBFEND - AP2 IAPS(16) = AP1 + 65536 LENS(16) = MIN0(65536,(IBFEND-IAPS(16))) BUFGUD(16) = LENS(16).GT.0 LN2 = MIN0(LN2,262144) BUFGUD(2) = LN2.GT.0 IF (.NOT.BUFGUD(2)) GOTO 123 IAPS(14) = AP2 + 65536 LENS(14) = MIN0(65536,(IBFEND-IAPS(14))) BUFGUD(14) = LENS(14).GT.0 AP3 = AP2 + 131072 LN3 = IBFEND - AP3 IAPS(17) = AP3 + 65536 LENS(17) = MIN0(65536,(IBFEND-IAPS(17))) BUFGUD(17) = LENS(17).GT.0

LN3 = MIN0(LN2,131072) BUFGUD(8) = LN3.GT.0 IF (.NOT.BUFGUD(8)) GOTO 123 AP4 = AP2 + 262144 LN4 = IBFEND - AP4 LN4 = MIN0(LN2,262144) IAPS(15) = AP4 + 65536 LENS(15) = MIN0(65536,(IBFEND-IAPS(15))) BUFGUD(15) = LENS(15).GT.0 BUFGUD(3) = LN4.GT.0 IF (.NOT.BUFGUD(3)) GOTO 123 AP5 = AP4 + 131072 LN5 = IBFEND - AP4 IAPS(18) = AP5 + 65536 LENS(18) = MIN0(65536,(IBFEND-IAPS(18))) BUFGUD(18) = LENS(18).GT.0 LN5 = MIN0(LN5,131072) BUFGUD(9) = LN5.GT.0 ENDIF 123 CONTINUE DO 224 I = 13,15 IF (LENS(I).EQ.0) THEN IAPS(I) = IAPS(I-12) LENS(I) = LENS(I-12) ENDIF 224 CONTINUE DO 225 I = 16,18 IF (LENS(I).EQ.0) THEN IAPS(I) = IAPS(I-9) LENS(I) = LENS(I-9) ENDIF 225 CONTINUE PRINT *,' ' IF (ZPOINT.EQ.0) THEN ZLEN = 0 ALEN = 0 PRINT *,' THERE IS INSUFFICIENT MEMORY TO ALLOCATE FOR BLANK FRAME ' PRINT *,' THERE IS INSUFFICIENT MEMORY TO ALLOCATE FOR MAX. FRAME ' ELSE IF (ZLEN.GT.65536) THEN BUFGUD(4) = .TRUE. IAPS(19) = ZPOINT + 65536 LENS(19) = ZLEN - 65536 BUFGUD(19) = LENS(19).GT.0 IF (LENS(19).GT.65536) THEN IAPS(20) = IAPS(19) + 65536 LENS(20) = LENS(19) - 65536 LENS(19) = 65536 IF (LENS(20).GT.65536) LENS(20) = 65536 BUFGUD(20) = LENS(20).GT.0 ENDIF ENDIF ENDIF IF (APOINT.EQ.0.AND.ZLEN.GT.0) THEN ALEN = 0 PRINT *,' A buffer of ',ZLEN,' bytes has been allocated for a BLANK FR AME buffer ' PRINT *,' THERE IS INSUFFICIENT MEMORY TO ALLOCATE FOR MAX. FRAME ' ELSEIF (ALEN.GT.0) THEN PRINT *,' A buffer of ',ZLEN,' bytes has been allocated for a BLANK FR

AME buffer ' PRINT *,' A buffer of ',ALEN,' bytes has been allocated for a MAX. FRA ME buffer ' BUFGUD(5) = .TRUE. IF (ALEN.GT.65536) THEN IAPS(21) = APOINT + 65536 LENS(21) = ALEN - 65536 BUFGUD(21) = LENS(21).GT.0 IF (LENS(21).GT.65536) THEN IAPS(22) = IAPS(21) + 65536 LENS(22) = LENS(21) - 65536 LENS(21) = 65536 IF (LENS(22).GT.65536) LENS(22) = 65536 BUFGUD(22) = LENS(22).GT.0 ENDIF ENDIF ENDIF APZR = ZPOINT IAPS(4) = ZPOINT IZR = ZPOINT LNZR = ZLEN LENS(4) = ZLEN APMX = APOINT IAPS(5) = APOINT IMX = APOINT LNMX = ALEN LENS(5) = ALEN IAVAIL = HOWMCH() - RESERV - 65536 HAVAIL = HEXOF(IAVAIL) TH0 = HEXOF(APMAIN) TH00 = HEXOF(APZR) TH000 = HEXOF(APMX) J = IAVAIL/262144 IF (J.GT.0) THEN RJ = FLOAT(IAVAIL)/262144.0 IF ((RJ-J).LT.0.15) J = J -1 IF (J.GT.3) J = 3 IF (J.EQ.0) GOTO 1331 SCRMRK = ALLOC(0) APSCR1 = ALLOC(262144) LENS(10) = 262144 BUFGUD(10) = .TRUE. IAPS(23) = APSCR1 + 65536 LENS(23) = 65536 BUFGUD(23) = .TRUE. IAPS(26) = APSCR1 + 131072 LENS(26) = 65536 BUFGUD(26) = .TRUE. * IJ = ALLOC(0) IAPS(29) = APSCR1 + 196608 LENS(29) = 65536 BUFGUD(29) = .TRUE. J1 = (IAVAIL - 262144) / 131072 J6 = (IAVAIL - 262144) / 65536 IF (J.GT.1) THEN * IJ = ALLOC(0) APSCR2 = ALLOC(262144) LENS(11) = 262144 BUFGUD(11) = .TRUE. IAPS(24) = APSCR2 + 65536

LENS(24) = 65536 BUFGUD(24) = .TRUE. IAPS(27) = APSCR2 + 131072 LENS(27) = 65536 BUFGUD(27) = .TRUE. IAPS(30) = APSCR2 + 196608 LENS(30) = 65536 BUFGUD(30) = .TRUE. J1 = (IAVAIL - 524288) / 131072 J6 = (IAVAIL - 524288) / 65536 IF (J.GT.2) THEN J = 3 IJ = ALLOC(0) APSCR3 = ALLOC(262144) LENS(12) = 262144 BUFGUD(12) = .TRUE. IAPS(25) = APSCR3 + 65536 LENS(25) = 65536 BUFGUD(25) = .TRUE. IAPS(28) = APSCR3 + 131072 LENS(28) = 65536 BUFGUD(28) = .TRUE. IAPS(31) = APSCR3 + 196608 LENS(31) = 65536 BUFGUD(31) = .TRUE. ELSEIF (J1.GE.1) THEN J = 2 IJ = ALLOC(0) APSCR3 = ALLOC(131072) LENS(12) = 131072 BUFGUD(12) = .TRUE. IAPS(25) = APSCR3 + 65536 LENS(25) = 65536 BUFGUD(25) = .TRUE. IAPS(28) = APSCR3 + 32768 LENS(28) = 32768 BUFGUD(28) = .TRUE. IAPS(31) = APSCR3 + 65536 + 32768 LENS(31) = 32768 BUFGUD(31) = .TRUE. ELSEIF (J6.EQ.1) THEN J = 2 IJ = ALLOC(0) APSCR3 = ALLOC(65536) LENS(12) = 65536 BUFGUD(12) = .TRUE. IAPS(25) = APSCR3 + 32768 LENS(25) = 32768 BUFGUD(25) = .TRUE. IAPS(28) = APSCR3 LENS(28) = 65536 BUFGUD(28) = .TRUE. IAPS(31) = APSCR3 + 32768 LENS(31) = 32768 BUFGUD(31) = .TRUE. ENDIF ELSEIF (J1.EQ.1) THEN IJ = ALLOC(0) APSCR2 = ALLOC(131072) LENS(11) = 131072

BUFGUD(11) = .TRUE. IAPS(24) = APSCR2 + 65536 LENS(24) = 65536 BUFGUD(24) = .TRUE. IAPS(27) = APSCR2 + 32768 LENS(27) = 32768 BUFGUD(27) = .TRUE. IAPS(30) = APSCR2 + 65536 + 32768 LENS(30) = 32768 BUFGUD(30) = .TRUE. ELSEIF (J6.GE.1) THEN * IJ = ALLOC(0) APSCR2 = ALLOC(65536) LENS(11) = 65536 BUFGUD(11) = .TRUE. IAPS(24) = APSCR2 + 32768 LENS(24) = 32768 BUFGUD(24) = .TRUE. IAPS(27) = APSCR2 LENS(27) = 32768 BUFGUD(27) = .TRUE. IAPS(30) = APSCR2 + 32768 LENS(30) = 32768 BUFGUD(30) = .TRUE. ENDIF PRINT *,' ALLOCATED ',J,' FULL SCRATCHPAD FRAME BUFFERS ' IF (J.EQ.3) GOTO 1333 ENDIF 1331 CONTINUE IAVAIL = HOWMCH() - RESERV - 65536 J = IAVAIL/65536 IF (J.GT.0) THEN IF (.NOT.BUFGUD(10)) THEN * IJ = ALLOC(0) APSCR1 = ALLOC(65536) LENS(10) = 65536 BUFGUD(10) = .TRUE. ENDIF IF (J.GT.1.OR.LENS(10).GT.65536) THEN IF (.NOT.BUFGUD(11)) THEN * IJ = ALLOC(0) APSCR2 = ALLOC(65536) LENS(11) = 65536 BUFGUD(11) = .TRUE. ENDIF IF ((J.GT.2.OR.LENS(11).GT.65536).AND..NOT.BUFGUD(12)) THEN * IJ = ALLOC(0) APSCR3 = ALLOC(65536) LENS(12) = 65536 BUFGUD(12) = .TRUE. ENDIF ENDIF ENDIF IF (.NOT.BUFGUD(11)) THEN IF (LENS(29).EQ.65536) THEN IAPS(11) = IAPS(29) LENS(11) = LENS(29) LENS(29) = 0 BUFGUD(11) = .TRUE. BUFGUD(29) = .FALSE.

ELSEIF (LENS(26).EQ.65536) THEN IAPS(11) = IAPS(26) LENS(11) = LENS(26) LENS(26) = 0 BUFGUD(11) = .TRUE. BUFGUD(26) = .FALSE. ELSEIF (LENS(23).EQ.65536) THEN IAPS(11) = IAPS(23) LENS(11) = LENS(23) LENS(23) = 0 BUFGUD(11) = .TRUE. BUFGUD(23) = .FALSE. ENDIF ENDIF IF (.NOT.BUFGUD(12)) THEN IF (LENS(29).EQ.65536) THEN IAPS(12) = IAPS(29) LENS(12) = LENS(29) LENS(29) = 0 BUFGUD(12) = .TRUE. BUFGUD(29) = .FALSE. ELSEIF (LENS(26).EQ.65536) THEN IAPS(12) = IAPS(26) LENS(12) = LENS(26) LENS(26) = 0 BUFGUD(12) = .TRUE. BUFGUD(26) = .FALSE. ELSEIF (LENS(23).EQ.65536) THEN IAPS(12) = IAPS(23) LENS(12) = LENS(23) LENS(23) = 0 BUFGUD(12) = .TRUE. BUFGUD(23) = .FALSE. ENDIF ENDIF 1333 CONTINUE IAVAIL = HOWMCH() - RESERV IJ = ALLOC(0) IF (IAVAIL.GE.65536) THEN IK = ALLOC(32768) IL = ALLOC(32768) I = 0 ELSEIF (BUFGUD(29)) THEN BUFGUD(29) = .FALSE. IK = IAPS(29) IL = IK + 32768 I = 29 ELSEIF (BUFGUD(12)) THEN BUFGUD(12) = .FALSE. IK = APSCR3 IL = IK + 32768 I = 12 ELSEIF (BUFGUD(11)) THEN BUFGUD(11) = .FALSE. IK = APSCR2 IL = IK + 32768 I = 11 ELSE IL = 0 IK = 0

I = 0 CALL BEEP PRINT *,' NO SPACE FOR CONVERSION TABLES! ' CALL FLASHB ENDIF IIJ = KADDR(IJ) IF (IK*IL.NE.0) THEN ASNTBL = IK SQRTBL = IL CALL CALL3(LDTBLS,IK,IL,IIJ) IF (ASNTBL.EQ.0.AND.I.NE.0) THEN BUFGUD(I) = .TRUE. ELSE IF (I.NE.0) LENS(I) = 0 THEHEX = HEXOF(IK) HX2 = HEXOF(IL) PRINT *,'ArcSin @ $',THEHEX,' Sqrt @ $',HX2 ENDIF ENDIF IAVAIL = HOWMCH() HAVAIL = HEXOF(IAVAIL) PRINT *,' ' PRINT *,'REMAINING MEMORY AVAILABLE (bytes) = ',HAVAIL,' = ',IAVAIL PRINT *,' ' PRINT *,' MAIN BUFFER @ $',TH0(3:8),' ZERO BUF @ $',TH00(3:8) & ,' MAX BUF @ $',TH000(3:8) IA = APMAIN IT = APMAIN IA1 = AP1 IA2 = AP2 IA3 = AP3 IA4 = AP4 IA5 = AP5 LENS(1) = LNMAIN LENS(2) = LN2 LENS(3) = LN4 LENS(7) = LN1 LENS(8) = LN3 LENS(9) = LN5 ISC1 = APSCR1 ISC2 = APSCR2 ISC3 = APSCR3 IJLEN = 65535 9977 CONTINUE MLENFR = LENFR DO 3770 I = 1,32 HAPS(I) = HEXOF(IAPS(I)) IF (GEZAP) TYPS(I) = -2 BUFGUD(I) = BUFGUD(I) .OR. (IAPS(I).NE.0.AND.LENS(I).GT.0) BUFUSE(I) = BUFGUD(I) .AND. (LENS(I).GE.IJLEN) 3770 CONTINUE RETURN *---------ENTRY REDOBF IF (LENFR.GT.131072) LENFR = 131072 IF (LENFR.LE.0) LENFR = 512 IF (MLENFR.NE.LENFR) THEN ZVALID = .FALSE. AVALID = .FALSE. ENDIF

IJLEN = LENFR*2 GEZAP = .FALSE. GOTO 9977 *---------ENTRY BFREDO(ILENFR) IJLEN = ILENFR*2 GEZAP = .FALSE. GOTO 9977 *---------ENTRY REALOC 9444 CONTINUE DO 9446 I = 1,239 CLOSE (UNIT=I,ERR=9445) 9445 CONTINUE 9446 CONTINUE CALL RLSE(MARK) GEZAP = .TRUE. GOTO 9999 *---------ENTRY R3ALOC 9344 CONTINUE DO 9346 I = 1,239 CLOSE (UNIT=I,ERR=9345) 9345 CONTINUE 9346 CONTINUE CALL RLSE(MARK) GEZAP = .FALSE. QSAVE = .TRUE. GOTO 9777 *---------ENTRY REAL0C(MMMARK) IF (MMMARK.LT.MARK) MARK = MMMARK GOTO 9444 *---------GEZAP = CHKADI(MARK) END *---------------------------------------------------------------------$NODEBUG INTEGER*4 FUNCTION PASCRL(A128,IJKLI) CHARACTER PROGNM*18,MAINLN*54 CHARACTER*1 TC,TCALGN(2),PADS*3,NCRUDQ,POLAR*2 CHARACTER*20 FRAME,FRAME2,FLNM,DFRAME,FILNAM*24,FNAME,FNAME2 CHARACTER*36 PSTATS(0:4),PSTAT(0:4) CHARACTER*8 HEXOF,RESULT,INPUT,FLAG,DATAHX,HX128,HX256,HX512 CHARACTER*8 SRHEX,SSPHEX,LOOPPT,DBHEX,LOOP2H REAL*4 CHGVLT,TLASER,DTIME*8,SET*8,TIME*8,CONTRS,BRIGHT REAL*4 VLTCHG,TINCR INTEGER*4 SENBAS,FPEEK,ISTACK,BST,AST,TIME4,DATA,SENDAT,FLPEEK,INTOF,KADDR INTEGER*4 ZLEN,ZMARK,ZPOINT,ALEN,AMARK,APOINT,AFMTYP,IGNORE,CUMUL(0:16383) INTEGER*4 ADDRDB,DBADDR,DEREF,REENTR,PAREAD,PARE0D,PARE1D,PARE2D,DEFKKK INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,MILLIS,GETIVC,GETSSP INTEGER*4 HEADER,RUNNUM,SHOTNO,PICPAG,GRPHPG,GRPAGE,HERE,GETBAK,GETBK2 INTEGER*4 MAGNIF,LLHILO,LEVEL,OLEVEL,LSTCHL,LSTTRK INTEGER*4 ERROR,RECLEN,FREC INTEGER*2 A128(0:262144),ASC,SCAN,KBF1,KBF2,ERR,PROFIL(0:16383),ISR,OSR INTEGER*2 IASC,ISCAN,IKBF1,IKBF2,IERR,DATA1,DATA2,FWPEEK,DATAS(2),GETSR INTEGER*2 ASCAN(7000),SCNQLN,TRACKS(3,0:255),MASK3,MS,IFOO,MASK INTEGER*2 CHNLS(0:511),CHLS(0:511),THEX0,I2AND2,L2NOT,MASK2,SMASK,CMASK INTEGER*2 WFM0DX,WFM1DX,TENCPI,SXTNCP,PCOLOR,ACOLOR LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY,FILEXS,ISOPEN

LOGICAL*4 DBYET,DBY2,FOO,PAROMA,PAR0MA,PAR1MA,SNOW,UTHEN LOGICAL*4 REPEAT,BIGGER,SKIP1L,NOISE,DOSCAN LOGICAL*4 DIDIT,EOT,NOREAD,DOUBLE,ONOFF,DBQQ LOGICAL*2 ABORT,ESCAPE,INTRPT,FLURB,AUTSCO LOGICAL*2 RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*2 ZVALID,ZZCORR,AVALID,AACORR,LINESY,ISOU LOGICAL*2 DOSTAK,DOMEM,IFLOAT,HELP,DOALL,RUNING LOGICAL*1 FLAG77(0:24),ISGONG,ISIT,ISGOIN,ISG0IN,CBLNRM,CBLINV LOGICAL*1 DISK,END,PARAM,FUBAR EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC) EQUIVALENCE (DATA,DATA1,DATAS(1)),(DATA2,DATAS(2)) EQUIVALENCE (PSTAT(0),PSTATS(0)),(CHNLS(0),CHLS(0)) COMMON /PSTAMS/PSTAT,/TWOPAR/PICPAG,GRPHPG,/GEWRTN/REPEAT,NMAG,CNTRS,BRGHT COMMON /IPPENC/SKIP1L,NOISE,/OMADIT/DOSCAN,/OMASCN/SCNQLN,ASCAN COMMON /OMANOW/CHGVLT,TLASER,POLAR,/FILES/DFRAME,RUNNUM,SHOTNO COMMON /NTRVN/ ABORT,ESCAPE,INTRPT,/PARCUM/IGNORE,PROFIL,CUMUL COMMON /BLKCNV/MAGNIF,LLHILO,CONTRS,BRIGHT COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/PSYNCH/LINESY 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,NO READ,ONOFF, & DBQQ,FLAG77,ISGONG,ISIT,PADS,NCRUDQ,/SCOAUT/AUTSCO COMMON /GARBAG/ERROR,DISK,END,PARAM,FUBAR,WFM0DX,WFM1DX,VLTCHG,TINCR, &FREC,RECLEN,TENCPI,SXTNCP COMMON /ZEROS/ ZVALID,ZLEN,ZMARK,ZPOINT,ZZCORR,/PARCBL/CBLNRM,CBLINV COMMON /AMPLS/ AVALID,ALEN,AMARK,APOINT,AACORR,AFMTYP COMMON /PARSCN/CHLS,TRACKS,LSTCHL,LSTTRK,THEX0,/NAMEPR/PROGNM,MAINLN COMMON /INDICS/DOSTAK,DOMEM,IFLOAT,LEVEL,OLEVEL,HELP,DOALL,RUNING SAVE /KEYGET/,/NTRVN/,/SHFSTA/,/OMAPAR/,/OMAPR2/,/PARZQX/,/FILES/ SAVE /BLKCNV/,/PSTAMS/,/TWOPAR/,/GEWRTN/,/IPPENC/,/OMADIT/,/OMASCN/ SAVE /ZEROS/,/AMPLS/,/PARCUM/,/OMANOW/,/STRBES/,/PARSCN/,/INDICS/ SAVE /SCOAUT/ EXTERNAL GETSR,GETIVC,SETIVC,SUPERM,USERM,GETSSP,RSTSSP,JUMPTO EXTERNAL FPEEK,ISTACK,HEXOF,I2AND2,WPOKE,LPOKE,FWPEEK,MILLIS,KADDR,BLKDS EXTERNAL DBADDR,DEBUGX,DEREF,SPOKE,SWPOKE,SLPOKE,PARSTA,PARSTQ,DIRDIR EXTERNAL DTIME,ISGOIN,CALL3,SETSR4,RUNSTQ,ISG0IN,RUNSTA,IJMPTO EXTERNAL NSTFX0,NSTMSK SAVE BIGGER = SCAN.GT.94 IKLI = IJKLI IF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.120)) THEN CALL SETPG0 CALL NSTFX0(.TRUE..AND.CTRL) PRINT *,' NORMALIZATION Fix 0 SET TO ',CTRL IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (SCRL.AND.(ASC.EQ.0.AND.SCAN.EQ.$32)) THEN CALL SETPG0 CALL NSTMSK(.TRUE..AND.CTRL) PRINT *,' NORMALIZATION MASKING SET TO ',CTRL IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (ASC.GE.$30.AND.ASC.LE.$37) THEN TIME4 = ASC - $30 IF (TIME4.EQ.0) TIME4 = 1 2576 CALL RUNSTQ(ISTAT)

CALL ISNTRP IF (ESCAPE.OR.INTRPT) GOTO 2 IF (ABORT) GOTO 9999 IF (ISTAT.GE.2) GOTO 2576 CALL PARSTO 2577 CALL RUNSTQ(ISTAT) IF (ISTAT.EQ.0) GOTO 2577 CALL TICHNL(TIME4) ZVALID = .FALSE. PRINT *,' TIME = ',TIME4,' * 20 microSECONDS ' CALL PARRUN IF (MODE2D) CALL PARR2D IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF ((TC.EQ.'D'.OR.TC.EQ.'d').OR. & (ASC.EQ.6.OR.(ASC.EQ.0.AND.SCAN.EQ.$21))) THEN IJ = SCAN CALL CRCLS PRINT *,' DRIVE? (0 .. 9, 10=DEFAULT DRIVE)' IDR = MENU(0,0,10) IF (IDR.EQ.10) IDR = -1 IF (IJ.EQ.$20) THEN PRINT *,'FILE TYPE? (use ? or * wildcards as for DIR command)' PRINT *,' (or @ for any Alpha, # for any digit)' READ (*,'(A)') FLNM PRINT *,' OUTPUT TO WHERE (0=SCREEN, 1=printer, 2 = file)' I = MENU(0,0,2) IF (I.EQ.1) THEN I = 7 CALL PRTEST ELSEIF (I.EQ.2) THEN I = 10 PRINT *,' What file? ' READ (*,'(A)') FNAME CALL FNCHCK(FNAME,'FIL',FNAME2) OPEN (UNIT=10,FILE=FNAME2,STATUS='NEW',ERR=3449) ENDIF 3449 CONTINUE INQUIRE (UNIT=I,OPENED=ISOPEN) IF (.NOT.ISOPEN) THEN PRINT *,' COULD NOT OPEN SPECIFIED OUTPUT DEVICE ' PRINT *,' USING SCREEN ' I = 0 ENDIF ELSE FLNM = '@???@###DAT' I = 0 ENDIF CALL DIRDIR(IDR,FLNM,' ',I) WRITE (11,*,ERR=4965) ' HIT ANY KEY TO CONTINUE ' 4965 CONTINUE CALL ISNTRP IF (IERR.NE.0) GOTO 4965 GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$12) THEN IF (.NOT.CTRL) THEN PRINT *,'Are you SURE? (y/N)' I = MENU(0,0,1) ELSE I = 1

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

ENDIF IF (I.EQ.1.AND.(.NOT.(ABORT.OR.ESCAPE.OR.INTRPT))) CALL IJMPTO($0E000) 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; 5->32)' 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; 5->32)' 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; 5->32)' 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; 5->32)' II = MENU(3,-5,5) CALL OMAMGT(II) CALL NUMLOF ELSEIF (INS) THEN CALL PARMGT ELSE CALL PARGTM ENDIF GOTO 2 ELSEIF (TC.EQ.'C'.OR.TC.EQ.'c') THEN CALL GCRCLS GOTO 2 ELSEIF (TC.EQ.'H'.OR.TC.EQ.'h') THEN CALL CRCLS PRINT *,' ' PRINT *,' Hacking ... , S for SUPERM; U for USERM; Z for SR' I = GETSR() RESULT = HEXOF(I) PRINT *,' SR = $',RESULT(5:8)

9191

TSET = DTIME() 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 9191 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 (TC.EQ.'S'.OR.TC.EQ.'s') THEN CALL GOTOXY(75,IJLKI) PRINT *,'S' CALL STOPAR IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (TC.EQ.'R') THEN CALL GOTOXY(75,IJLKI) PRINT *,'R' CALL PARR2D IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (TC.EQ.'r') THEN CALL GOTOXY(75,IJLKI) PRINT *,'r' CALL PARRUN IJKLI = IJKLI + 1 IF (IJKLI.GE.23) GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.61) THEN CALL DSPSWP ELSEIF (ASC.EQ.0.AND.SCAN.EQ.64) THEN

* F3 * F6 CALL TSTSCR CALL TSTKEY ELSEIF (TC.EQ.'T'.OR.TC.EQ.'t') THEN CALL CRCLS 9445 PRINT *,' TAIL IGNORE VARIABLE = ',IGNORE PRINT *,' NEW VALUE? (>4, invalid=>ignore)' READ (*,'(BN,I8)',ERR=9445) NEWIGN IF (NEWIGN.GE.5) IGNORE = NEWIGN PRINT *,' TAIL IGNORE VARIABLE = ',IGNORE CALL WAIT(2.0) GOTO 2

ELSEIF (ASC.EQ.0.AND.(SCAN.EQ.$44.OR.SCAN.EQ.131)) THEN CALL CRCLS PRINT *,' ' 8644 PRINT *,' GET scan from what FILE? (xxxxxxxx.PAR)' READ (*,'(A)',ERR=8644) FILNAM IF (FILNAM.EQ.' '.OR.FILNAM(1:1).EQ.CHAR(3)) GOTO 2 CALL FNCHCK(FILNAM,'PAR',FLNM) INQUIRE (FILE=FLNM,EXIST=FILEXS) IF (FILEXS) THEN CALL GETSCN(FLNM) ELSE CALL FNCHCK(FILNAM,'HEX',FLNM) INQUIRE (FILE=FLNM,EXIST=FILEXS) IF (FILEXS) THEN CALL GETSCN(FLNM) ELSE GOTO 8644 ENDIF ENDIF ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$43) THEN CALL CRCLS PRINT *,' ' 6644 PRINT *,' Save scan to what FILE? (xxxxxxxx.PAR)' READ (*,'(A)',ERR=6644) FILNAM IF (FILNAM.EQ.' '.OR.FILNAM(1:1).EQ.CHAR(3)) GOTO 2 CALL FNCHCK(FILNAM,'PAR',FLNM) 6647 INQUIRE (FILE=FLNM,EXIST=FILEXS) IF (FILEXS) THEN FILNAM = FLNM CALL UNPROT(FILNAM) OPEN (UNIT=10,FILE=FLNM,FORM='BINARY',ERR=6647,IOSTAT=IOS) ELSE OPEN (UNIT=10,FILE=FLNM,STATUS='NEW',FORM='BINARY',ERR=6647,IOSTAT =IOS) ENDIF HD000 = $D000 WRITE (10,ERR=2) (ASCAN(I),I=1,SCNQLN),HD000 ENDFILE (10,ERR=2) CLOSE (10,ERR=2) ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$42) THEN CALL PARRST CALL CRCLS PRINT *,' ' CALL WAIT(1.0) CALL FLLSCN WRITE (11,'(A)') 'Downloading ... ' CALL REGRWV WRITE (11,'(A)') 'Downloading completed. ' CALL PARR2D ELSEIF (TC.EQ.'*'.AND.SCAN.EQ.55) THEN IZ = ZPOINT IA = IA256 CALL SETPG0 CALL LEDSET(4) IPXLEN = KADDR(IIXLEN) IPYLEN = KADDR(IIYLEN) CALL GCRCLS PRINT *,' ' PRINT *,'FRAMING TEST - will display current picture until' PRINT *,' another FRAME can be acquired, then the new picture will'

5544

PRINT *,' be displayed. SEQUENCING is indicated by the KEYPAD LEDs' PRINT *,' ' PRINT *,'TYPE Ctrl C to EXIT this mode ' PRINT *,' ' CALL LEDUP CALL PARSTA(ISTAT) PRINT *,' PAR STATUS INDICATOR = ',ISTAT,' ',PSTAT(ISTAT) IF (ISTAT.EQ.1) THEN CALL PARR2D GOTO 5544 ENDIF IF (ISTAT.GE.2) THEN IF (ISTAT.EQ.4) PRINT *,'After connecting cable - turn ON par powe CALL PAUSE(' Type return when things are ready.') IF (ABORT) GOTO 9999 IF (ESCAPE.OR.INTRPT) GOTO 2 CALL LODPAR('HSCAN128') WHSCAN = 4 IXLEN = 250 IYLEN = 128 MAGNIF = 17 PRINT *,'HAVE LOADED DEFAULT 2D MODE SCAN ...' ELSE PRINT *,'DETERMINING PICTURE FRAME SIZE ...' CALL FRAMLN(A128,LENFR,LENTR,NTR) CONTINUE II = LENFR IF (II.LT.2000.OR.LENTR.LT.45.OR.NTR.LT.45) THEN PRINT *,'NOT CURRENTLY RUNNING WITH SCAN PATTERN ...' CALL LODPAR('HSCAN128') WHSCAN = 4 IXLEN = 250 IYLEN = 128 MAGNIF = 17 PRINT *,'HAVE LOADED DEFAULT 2D MODE SCAN ...' ELSE PRINT *,' PIXELS PER FRAME = ',II PRINT *,' PIXELS PER TRACK = ',LENTR IXLEN = LENTR IYLEN = NTR PRINT *,' TRACKS PER FRAME = ',IYLEN ENDIF IXNUM = IXLEN IYNUM = IYLEN LENFR = IXLEN*IYLEN ENDIF ILEN = LENFR REPEAT = .FALSE. MAGNIF = 17 CONTRS = 0.0 BRIGHT = 0.0 PRINT *,'CLEARING PICTURE MEMORY BUFFER ...' LENGTH = 262244 CALL LEDRST CALL LEDUP CALL IZAPIT(IA128,LENGTH) PRINT *,' HAVE CLEARED MEMORY BUFFER, ABOUT TO READ FRAME ...' FLURB = .FALSE. CALL LEDUP

r.'

5566

CALL ISNTRP IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.FLURB) THEN CALL LEDSON CALL SETPG0 CALL GRCLS GOTO 2 ENDIF LENGTH = 524288 IF (CBLNRM) THEN CALL ISREAD(IA128,LENGTH) ELSE CALL ISREID(IA128,LENGTH) ENDIF PRINT *,' HAVE READ FRAME, PROCESSING ',LENGTH,' BYTES FOR DISPLAY ... ' CALL LEDUP IF (ZZCORR.AND.ZVALID) CALL PARZRO(IA,IZ,ILEN) IF (AACORR.AND.AVALID) CALL PARMAX(IA,IMX,ILEN) IIXLEN = IXLEN IIYLEN = IYLEN PICPAG = 0 GRPHPG = 1 CALL NORML2(A128(0),IIXLEN,IIYLEN) MAGNIF = 17 CALL BLKDS(A128(0),IIXLEN,IIYLEN) CALL LEDUP IF (ERR.EQ.0) THEN FLURB = ASC.EQ.3 .OR. ((LSH.OR.RSH).AND.SCAN.EQ.121) FLURB = FLURB .OR. (SCRL.AND.RSH.AND.SCAN.EQ.$4F) ENDIF CALL LEDSET(5) LENGTH = 262244 CALL IZAPIT(IA128,LENGTH) CONTINUE CALL LEDUP CALL ISNTRP IF (ABORT.OR.ESCAPE.OR.INTRPT.OR.FLURB) THEN CALL LEDSON CALL SETPG0 CALL GRCLS GOTO 2 ENDIF LENGTH = 524288 IF (CBLNRM) THEN CALL ISREAD(IA128,LENGTH) ELSE CALL ISREID(IA128,LENGTH) ENDIF CALL LEDUP IF (ZZCORR.AND.ZVALID) CALL PARZRO(IA,IZ,ILEN) IF (AACORR.AND.AVALID) CALL PARMAX(IA,IMX,ILEN) CALL USESWP PICPAG = GRPAGE() GRPHPG = 1 - PICPAG IIXLEN = IXLEN IIYLEN = IYLEN CALL NORML2(A128(0),IIXLEN,IIYLEN) MAGNIF = 17 CONTINUE CALL BLKDS(A128(0),IIXLEN,IIYLEN)

5555

8384

CALL LEDUP CALL DSPSWP CALL ISNTRP IF (ERR.EQ.0) THEN FLURB = ASC.EQ.3 .OR. ((LSH.OR.RSH).AND.SCAN.EQ.121) FLURB = FLURB .OR. (SCRL.AND.RSH.AND.SCAN.EQ.$4F) REPEAT = .FALSE. IF (ASC.EQ.7) CALL GEWAIT ENDIF IF (REPEAT) THEN REPEAT = .FALSE. BRIGHT = BRGHT CONTRS = CNTRS MAGNIF = NMAG GOTO 8384 ELSE MAGNIF = 0 CONTRS = 0.0 BRIGHT = 0.0 ENDIF CALL LEDSET(5) LENGTH = 262244 CALL IZAPIT(IA128,LENGTH) GOTO 5555 ELSEIF (TC.EQ.'?') THEN CALL PLTHLP 8383 CALL ISNTRP IF (ERR.NE.0) GOTO 8383 ELSEIF (TC.EQ.'I'.OR.TC.EQ.'i') THEN FLAG77(IKLI) = .TRUE. INTRPS = .TRUE. CALL GOTOXY(75,IKLI) PRINT *,'I' IF (IJKLI.GE.23) GOTO 2 ELSEIF (ASC.EQ.0.AND.SCAN.EQ.$17) THEN FLAG77(IKLI) = .TRUE. INTRPS = .FALSE. CALL GOTOXY(75,IKLI) PRINT *,'i' IF (IJKLI.GE.23) GOTO 2 ELSEIF (ASC.EQ.9.OR.SCAN.EQ.$0F) THEN FLAG77(IKLI) = .TRUE. SKIP1L = .NOT. (RSH.OR.LSH) CALL GOTOXY(75,IKLI) IF (SKIP1L) THEN PRINT *,'1S' ELSE PRINT *,'0s' ENDIF IF (IJKLI.GE.23) GOTO 2 * ELSEIF (TC.EQ.'w'.OR.TC.EQ.'W') THEN * CALL DOSCOP * CALL CRUNCH ELSEIF (TC.EQ.'P'.OR.TC.EQ.'p') THEN CALL XYGOTO(0,4) PRINT *,' THE X0 = ',THEX0 PRINT *,' ' 8402 PRINT *,' New value? (Valid 0 .. 511; invalid -> no change)' READ (*,*,ERR=8402) IIX0 IF (IIX0.GE.0.AND.IIX0.LE.511) THEX0 = IIX0

* * * * * * * *2399 * * * * *

1 1001

911 9999

CALL RSETTR CALL FLLSCN PRINT *,' ' PRINT *,' THE X0 = ',THEX0 CALL WAIT(0.5) GOTO 2 ELSEIF (TC.EQ.'N'.OR.TC.EQ.'n') THEN PRINT *,'NTRSCN .' CALL NTRSCN GOTO 2 ELSEIF (TC.EQ.'F'.OR.TC.EQ.'f') THEN PRINT *,'FLLSCN .' CALL FLLSCN GOTO 2 ELSEIF (TC.EQ.'-') THEN PRINT *,'par status checking OFF' CALL MSKPAR(0) ELSEIF (TC.EQ.'+') THEN PRINT *,'par status checking ON' CALL MSKPAR($FFFF) 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 CALL LABELR IF (END) GOTO 2 CALL DOSCOP CALL CRUNCH CALL WFMOUT GOTO 2 ELSE SCRL = .FALSE. II = PACOMM(A128,IJKLI) IF (II.EQ.2) GOTO 2 IF (II.EQ.911) GOTO 911 IF (II.EQ.9999) GOTO 9999 IJKLI = IJKLI + 1 IF (IJKLI.GE.24) THEN GOTO 2 ENDIF ENDIF PASCRL = 0 CONTINUE ERR = -1 ASC = 0 SCAN = 0 RETURN CONTINUE QWERTY = .TRUE. NOISE = .TRUE. PASCRL = 2 CALL GRCLS GOTO 1001 CONTINUE PASCRL = 911 RETURN CONTINUE

PASCRL = 9999 RETURN 8121 CONTINUE PRINT *,' OPEN ERROR FOR FILE: ',FRAME CALL PAUSE(' ') GOTO 2 8122 CONTINUE PRINT *,' CLOSE ERROR FOR FILE: ',FRAME CALL PAUSE(' ') GOTO 2 7898 FORMAT (I8,' BYTES REPORTED BY ASM SUBROUTINE.') 9878 FORMAT (BN,I8.0) END *-------------------------------------------------------------------------SUBROUTINE BEFBLK(IX,IY) INTEGER*4 IX,IY COMMON /FRAMNG/LLENFR,LLENTR,NNTR SAVE /FRAMNG/ IF (IY.LE.0) IY = NNTR IF (IX.LE.0) IX = LLENTR IF (IX.LE.0.OR.IY.LE.0) THEN 1 PRINT *,' NEW X LEN = ? (0 for no change)' READ (*,*,ERR=1) I IF (I.GT.0) IX = I 2 PRINT *,' NEW Y LEN = ? (0 for no change)' READ (*,*,ERR=2) I IF (I.GT.0) IY = I ENDIF IF (IY.LE.0) IY = 101 IF (IX.LE.0) IX = 101 RETURN END *---------------------------------------------------------------------$SEGMENT MORPAR SUBROUTINE PARHLP CHARACTER*20 FRAME,FRAME2,FLNM,FILNAM*24 CHARACTER*8 SRHEX,SSPHEX,LOOPPT,DBHEX,LOOP2H CHARACTER*8 HEXOF,RESULT,INPUT,FLAG,DATAHX,HX128,HX256,HX512 REAL*8 DTIME,SET,TIME INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,HEADER INTEGER*4 SENBAS,BST,AST,TIME4,DATA,SENDAT,INTOF,KADDR,MILLIS INTEGER*2 DATA1,DATA2,DATAS(2),MASK3,MS,ISR,OSR INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR LOGICAL*4 INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,QWERTY LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS LOGICAL*1 ISGOIN,ISIT EQUIVALENCE (DATA,DATA1,DATAS(1)),(DATA2,DATAS(2)) EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR COMMON /NTRVN/ABORT,ESCAPE,INTRPT COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY, IA128,SENBAS,SENDAT COMMON /OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256,IA512 SAVE /NTRVN/,/KEYGET/,/SHFSTA/,/OMAPAR/,/OMAPR2/ EXTERNAL DTIME,ISGOIN,MILLIS SAVE CALL GCRCLS PRINT *,' ' PRINT '(A76)','This is the PAR/OMA testing and data acquisition program ba

sic help screen.' PRINT '(A73)','This program uses single keystroke commands, and uses vario us shifts to ' PRINT *,'extend the possibilities available. ' PRINT *,' ' PRINT *,'Certain conventions are used to indicate various key combinations : ' PRINT '(A74)','Where necessary for unambiguity, the key will be listed by name, such as' PRINT *,'<Esc> or <Ctrl> or <PrtSc> or <F1> or <Return> or <A> ' PRINT '(A73)','The base key is indicated by it''s ASCII result when this i s unambiguous,' PRINT *,'for example the <Q> key is referred to as Q; note that 1 refers t o the' PRINT *,'next to <Esc> not the keypad <End>, which can generate an ASCII " 1".' PRINT *,'The cursor control/numeric keypad keys are referred to as kpd1 th rough' PRINT *,'kpd9; kpd1 is <End> and <PgUp> is kpd9.' PRINT *,' ' PRINT *,'The left and right shifts, <Alt>, <Ctrl> and <ScrollLock> are use d as' PRINT *,'modifiers to other keys. <Ctrl> is indicated by a prefix of "^", <Alt>' PRINT *,'by "!", <ScrollLock> by "*", <Shift> by "|" (for either shift) or "(" ' PRINT *,'for the left side <Shift> and ")" for the right side <Shift>. In this' PRINT *,'In this notation the standard <Ctrl><Alt><Delete> reboot combinat ion ' PRINT *,'is indicated as ^!<Del> or !^<Del> ' PRINT *,' -----------------> hit <Return> to continue <-------------------- ' 1 CONTINUE CALL GETKEY(ASC,SCAN,KBF1,KBF2,ERR) IF (ERR.NE.0) GOTO 1 IF (ASC.EQ.3) RETURN IF (ASC.NE.13.OR.SCAN.NE.$1C) GOTO 1 CALL CRCLS PRINT '(A73)','One final comment on this notation, when a key is indicated in a shifted' PRINT '(A74)','state other than it''s base state, this is usually signific ant. So <PrtSc>' PRINT '(A73)','means the SHIFTED state of the key, but <*> refers to the U NSHIFTED key.' PRINT *,' ' PRINT *,' COMMONLY USED COMMANDS ARE: ' PRINT *,' ' PRINT *,' !1 - RESET the PAR CONTROLLER ' PRINT *,' !2 - reset PAR, load USUAL 2d scan (500x256) - start run ' PRINT *,' !^2 - reset PAR, load HALF 2d scan (256x256) - start run ' PRINT *,' !3 - reset PAR, ASK file name - loads PAR from that file ' PRINT *,' ' PRINT *,' ^S or !S - Stop the PAR data scanning - IDLE' PRINT *,' ^R - start the PAR Running - ONE dimen.(1d) scan mode' PRINT *,' !R - start the PAR Running - TWO dimen.(2d) scan mode' PRINT *,' '

PRINT PRINT PRINT PRINT PRINT -- '

*,' *,' *,' *,' *,'

^C - <INTRPT> - break out of current level and pop up a level' !|1 or !C or <Alt><!> - <ESCAPE> - like <INTRPT> but stronger' BOTH of the above can dump you back to CSOS if over-used' ' -----------------> hit <Return> to continue <-------------------

2 CONTINUE CALL GETKEY(ASC,SCAN,KBF1,KBF2,ERR) IF (ERR.NE.0) GOTO 2 IF (ASC.EQ.3) RETURN IF (ASC.NE.13.OR.SCAN.NE.$1C) GOTO 2 CALL CRCLS PRINT *,' ' PRINT *,' F3 - displays SCAN parameters (pixels/frame, pixels/track, &c' PRINT *,' F8 or F9 or F10 - determine length (in PIXELS) of data frame ' PRINT *,' <*> (under <PrtSc>) - ALIGNMENT mode - display frames repeatedly ' PRINT *,' ' PRINT *,' 1 2 3 4 5 6 7 - set PIXEL dwell time in increments of 20 microSE C' PRINT *,'--- THE ABOVE time sets are effective ONLY if the PAR is idling' PRINT *,'>>> *1 *2 through *7 WILL SET DWELL TIME EVEN IF PAR IS SCANNING ' PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT -- ' 3 CONTINUE CALL GETKEY(ASC,SCAN,KBF1,KBF2,ERR) IF (ERR.NE.0) GOTO 3 IF (ASC.EQ.3) RETURN IF (ASC.NE.13.OR.SCAN.NE.$1C) GOTO 3 CALL PLTHLP 4 CONTINUE CALL GETKEY(ASC,SCAN,KBF1,KBF2,ERR) IF (ERR.NE.0) GOTO 4 IF (ASC.EQ.3) RETURN IF (ASC.NE.13.OR.SCAN.NE.$1C) GOTO 4 RETURN END *---------------------------------------------------------------------INTEGER*4 FUNCTION PARARG(A128,WASOFF) INTEGER*2 A128(0:262200) CHARACTER*1 FRAME*20,TC,TCALGN(2),ARGSTR(5)*30,ARGCHR(30,5),IT*2,CHR CHARACTER*12 FIL,FNAME*30 INTEGER*4 IXLEN,IYLEN,IIXLEN,IIYLEN,IXNUM,IYNUM,SENDAT,SENBAS,IA128 INTEGER*4 LENARG(5),INDEX(5) INTEGER*2 ASC,SCAN,KBF1,KBF2,ERR,IASC,ISCAN,IKBF1,IKBF2,IERR INTEGER*2 NARG,LSYNCH,ARGBYT(30,5)*1 LOGICAL*4 ISDBON,DBISON,DATACQ,NOISE,MODE2D,PICTUR,HEXIT,QWERTY *,'--- standard scans set dwell time to 2 (40 microS/PIXEL) ' *,' ' *,' ^E - change to scan edit mode (? will get edit help) ' *,' ^X - temp. change to extra command mode (? will get help) ' *,' ^X Z - ReInitialize Screen Display parameters' *,' : - REDISPLAY FRAMES mode' *,' " - STORE FRAMES mode' *,' ~ - FRAMOPS mode (FRAME OPERATIONS) ' *,' ' *,' *^!E (Scrl Ctrl Alt E) - RE INITIALIZE ' *,' ' *,' -----------------> hit <Return> to continue <-------------------

LOGICAL*2 ABORT,ESCAPE,INTRPT,RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,BUSDUN LOGICAL*1 WASOFF,FRSTFL,ZAPOK EQUIVALENCE (TCALGN(1),IASC),(TCALGN(2),TC) EQUIVALENCE (ARGSTR(1),ARGCHR(1,1),ARGBYT(1,1)) EQUIVALENCE (ASC,IASC),(SCAN,ISCAN),(KBF1,IKBF1),(KBF2,IKBF2),(ERR,IERR) COMMON /KEYGET/IASC,ISCAN,IKBF1,IKBF2,IERR,/FRAMNG/LLENFR,LLENTR,NNTR COMMON /NTRVN/ABORT,ESCAPE,INTRPT,/OMAPR2/IIXLEN,IIYLEN,IXLEN,IYLEN,IA256, IA512 COMMON /OMAPAR/IXNUM,IYNUM,INTRPS,MODE2D,PICTUR,HEXIT,DATACQ,FRAME,QWERTY, IA128,SENBAS,SENDAT COMMON /SHFSTA/RSH,LSH,CTRL,ALT,SCRL,NUML,CAPS,INS,/INT488/BUSDUN SAVE /KEYGET/,/SHFSTA/,/OMAPAR/,/NTRVN/,/INT488/ SAVE * CALL GOTOXY(0,0) CALL CLS PRINT *,'Processing command line arguments ...' FRSTFL = .TRUE. NUMARG = NARG() NARG2 = NUMARG NUMARG = MIN0(NUMARG,3) PARARG = 911 LSYNCH = $7106 RSH = .FALSE. LSH = .FALSE. SCRL = .FALSE. ALT = .FALSE. CTRL = .FALSE. ABORT = .FALSE. ESCAPE = .FALSE. INTRPT = .FALSE. ASC = $30 SCAN = $C7 KBF1 = 0 KBF2 = 0 ZAPOK = .TRUE. DO 1 I = 1,NUMARG LENARG(I) = I CALL GETARG(LENARG(I),ARGSTR(I)) * PRINT *,' PARARG: ARGSTR(',I,') = ',ARGSTR(I),' LEN = ',LENARG(I) WRITE (*,*,ERR=1001)' PARARG: ARGSTR(',I,') = ',ARGSTR(I),' LEN = ',LE NARG(I) INDEX(I) = I 1 CONTINUE GOTO 1002 1001 CONTINUE CALL TSTSCR CALL RESCRN 1002 CONTINUE DO 2 J = 1,(NUMARG-1) DO 3 K = (J+1),NUMARG IF (LENARG(INDEX(J)).LT.LENARG(INDEX(K))) THEN L = INDEX(J) INDEX(J) = INDEX(K) INDEX(K) = L ENDIF 3 CONTINUE 2 CONTINUE DO 4 J = 1,NUMARG I = INDEX(J)

IF (LENARG(I).GE.3.AND.FRSTFL) THEN FRSTFL = .FALSE. CALL FNCHCK(ARGSTR(I),'PAR',FNAME) CALL PRESCN CALL LODPAR(FNAME) WASOFF = .FALSE. IYLEN = NNTR IXLEN = LLENTR IIXLEN = IXLEN IIYLEN = IYLEN IYNUM = IYLEN IXNUM = IXLEN PARARG = 2 ELSEIF (LENARG(I).EQ.2) THEN IT = ARGSTR(I) IF (IT.EQ.'LS'.OR.IT.EQ.'ls'.OR.IT.EQ.'Ls'.OR.IT.EQ.'lS') THEN CALL WSPOKE(SENDAT,LSYNCH) ELSEIF (IT(1:1).EQ.'-') THEN LENARG(I) = 1 IT(1:1) = IT(2:2) ELSEIF (IT(1:1).EQ.'!') THEN TC = IT(2:2) IF (ASC.GE.48.AND.ASC.LE.57.AND.WASOFF) THEN FIL = 'SCAN'//CHAR(ASC) CALL FNCHCK(FIL,'PAR',FNAME) CALL PRESCN CALL LODPAR(FNAME) WASOFF = .FALSE. IYLEN = NNTR IXLEN = LLENTR IIXLEN = IXLEN IIYLEN = IYLEN IYNUM = IYLEN IXNUM = IXLEN IF (FRSTFL.AND.(PARARG.NE.911.OR.ZAPOK)) PARARG = 2 FRSTFL = .FALSE. ELSEIF (TC.EQ.'E'.OR.TC.EQ.'e') THEN ZAPOK = .FALSE. PARARG = 911 SCAN = $12 ASC = 0 ELSEIF (TC.EQ.'D'.OR.TC.EQ.'d') THEN ZAPOK = .FALSE. PARARG = 911 SCAN = $20 ASC = 0 ELSEIF ((TC.EQ.'-').OR.(TC.EQ.'!')) THEN CALL MSKPAR(0) ENDIF ENDIF ENDIF IF (LENARG(I).EQ.1) THEN CHR = ARGCHR(1,I) IF (CHR.EQ.'*') THEN ZAPOK = .FALSE. PARARG = 911 TC = '*' SCAN = 55 ELSEIF (CHR.EQ.'&') THEN ZAPOK = .FALSE.

PARARG = 911 SCRL = .TRUE. TC = '*' SCAN = 55 ELSEIF ((CHR.EQ.'-').OR.(CHR.EQ.'!')) THEN CALL MSKPAR(0) ELSEIF (CHR.EQ.'P') THEN PICTUR = .TRUE. ELSEIF (CHR.EQ.'D') THEN DATACQ = .TRUE. ELSEIF (CHR.EQ.'H') THEN HEXIT = .TRUE. ELSEIF (CHR.EQ.'p') THEN PICTUR = .FALSE. ELSEIF (CHR.EQ.'d') THEN DATACQ = .FALSE. ELSEIF (CHR.EQ.'h') THEN HEXIT = .FALSE. ELSEIF (ICHAR(CHR).GE.133) THEN ZAPOK = .FALSE. SCAN = ICHAR(CHR) ASC = SCAN PARARG = 911 ELSE ZAPOK = .FALSE. PARARG = 911 SCRL = .FALSE. TC = CHR SCAN = 0 ENDIF ENDIF 4 CONTINUE I = 0 * IF (BUSDUN.AND.NARG2.LT.3) THEN * PRINT *,'IEEE-488 (GPIB) BUS SETUP? (Y/n)' * I = MENU(1,0,1) * ENDIF * IF (I.EQ.1.OR..NOT.BUSDUN) THEN * BUSDUN = .FALSE. * CALL INTSCO * CALL HELLO * CALL INITLB * ENDIF RETURN END *---------------------------------------------------------------------*$DEBUG SUBROUTINE LDTBLS(ASNTBL,SQRTBL,MARK) CHARACTER*16 NAME,NAME2*18,ANAME,SNAME INTEGER*4 MARK,ASNTAB,SQRTAB,KADDR INTEGER*2 ASNTBL(16384),SQRTBL(16384) LOGICAL*4 EXISTS COMMON /CNVTBL/ASNTAB,SQRTAB SAVE /CNVTBL/ * ANAME = ' ' SNAME = ' ' NAME = 'ARCSIN.TBL ' INQUIRE (FILE=NAME,EXIST=EXISTS) IF (EXISTS) THEN

ANAME = NAME GOTO 2 ELSE N = 3 1 CONTINUE N = N + 1 NAME2 = ' ' WRITE (NAME2,'(I1.1,'':'',A)') N,NAME INQUIRE (FILE=NAME2,EXIST=EXISTS) IF (EXISTS) THEN ANAME = NAME2 GOTO 2 ENDIF IF (N.EQ.7) N = -1 IF (N.NE.3) GOTO 1 ENDIF 3 CONTINUE CALL RLSE(MARK) CALL DASNTB(0) CALL DSQRTB(0) ASNTAB = 0 SQRTAB = 0 RETURN 2 CONTINUE NAME = 'SQRT4096.TBL ' INQUIRE (FILE=NAME,EXIST=EXISTS) IF (EXISTS) THEN SNAME = NAME GOTO 12 ELSE N = 3 11 CONTINUE N = N + 1 NAME2 = ' ' WRITE (NAME2,'(I1.1,'':'',A)') N,NAME INQUIRE (FILE=NAME2,EXIST=EXISTS) IF (EXISTS) THEN SNAME = NAME2 GOTO 12 ENDIF IF (N.EQ.7) N = -1 IF (N.NE.3) GOTO 11 ENDIF GOTO 3 12 CONTINUE WRITE (*,'(\''E conversion tables found ''\)') OPEN (UNIT=70,FILE=ANAME,FORM='BINARY',ERR=3) OPEN (UNIT=71,FILE=SNAME,FORM='BINARY',ERR=3) CALL SREAD(70,ASNTBL(1),32768,0,0,0,IERROR) IF (IERROR.NE.0) THEN PRINT *,CHAR(10),CHAR(13),'ERROR READING ',ANAME,' IERROR = ',IERROR REWIND (70) READ (70,ERR=3,END=14) (ASNTBL(J),J=1,16384) ENDIF 14 CONTINUE * 14 CLOSE (70,ERR=13) * 13 OPEN (UNIT=71,FILE=SNAME,FORM='BINARY',ERR=3) CALL SREAD(71,SQRTBL(1),32768,0,0,0,IERROR) IF (IERROR.NE.0) THEN PRINT *,CHAR(10),CHAR(13),'ERROR READING ',SNAME,' IERROR = ',IERROR

REWIND (71) READ (71,ERR=3,END=24) (SQRTBL(J),J=1,16384) ENDIF CLOSE (70,ERR=24) 24 CLOSE (71,ERR=23) 23 PRINT *,'and loaded.' ASNTAB = KADDR(ASNTBL(1)) SQRTAB = KADDR(SQRTBL(1)) CALL DASNTB(ASNTBL(1)) CALL DSQRTB(SQRTBL(1)) RETURN END *---------------------------------------------------------------------LOGICAL*4 FUNCTION CHKADR(IT) INTEGER*4 LASTXX,IT,IADR COMMON /BEGADR/LASTXX SAVE /BEGADR/ SAVE * IADR = IT CHKADR = IADR.GE.LASTXX RETURN END *---------------------------------------------------------------------LOGICAL*4 FUNCTION CHKADI(IT) INTEGER*4 LASTXX,IT,IADR,KADDR COMMON /BEGADR/LASTXX SAVE /BEGADR/ SAVE EXTERNAL KADDR * IADR = KADDR(IT) CHKADI = IADR.GE.LASTXX RETURN END

Das könnte Ihnen auch gefallen