Trailing-Edge
-
PDP-10 Archives
-
bb-k345a-sb
-
mtcopy.mac
There are 10 other files named mtcopy.mac in the archive. Click here to see a list.
TITLE MTCOPY COPY AND VERIFY MAG TAPES %3(63)
SUBTTL T.WACHS/PFC 13-OCT-74
;COPYRIGHT (C) 1972,1978,1979 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
CUSTVR==0 ;CUSTOMER VERSION
DECVER==3 ;DEC VERSION
DECMVR==0 ;DEC MINOR VERSION
DECEVR==63 ;DEC EDIT VERSION
SEARCH C
SALL
;PROGRAM TO COPY MAG TAPES. IT WILL POSITION THEM. IT CAN
;COPY N FILES OR TO DOUBLE EOF. USER CAN SPECIFY DENSITY AND
;IBM VS. DEC MODE. VERIFICATION CAN BE DONE IF NEEDED.
ND MAXSIZ,^D700 ;MAX RECORD SIZE [60]
ND NUMBUF,6 ;NUM BUFS/CHANNEL
ND LN$PDL,20 ;PD LIST
LOC 137
.JBVER: BYTE (3)CUSTVR (9)DECVER (6)DECMVR (18)DECEVR
RELOC
; REVISION HISTORY
;%0 UNRELEASED
;A) CONVERT TO BUFFERED I/O
;B) IMPROVE MESSAGES
;C) ALLOW = <ALT><ESC>, ETC.
;D) TYPE OUT DENSITY
;E) ADD HELP TEXT
;%1(50) RELEASED JAN, 1972 (UNSUPPORTED)
;A) ALLOW SPACES, TABS, COMMENTS
;B) ADD /A/B/C:N/R/U/N
;C) IMPROVE COMMAND SCAN DIAGNOSTICS
;D) USE HELPER
;E) ADD DEFAULTS ACROSS COMMANDS
;F) DETECT RECORDS TOO LARGE
;%2(57) UNRELEASED MAR, 1972 (UNSUPPORTED)
;60 EXPAND BUFFER SIZE TO HANDLE FRS, ETC.
;61 HANDLE .RUN MTCOPY (...)
;62 SUPPORT ERROR MESSAGE STANDARD
;63 HANDLE DEV:MTCOPY (...)
F=0
A=1
B=2
C=3
D=4
RDX=13
TOT=14 ;BLOCK COUNTER
LOC=15 ;FILE COUNTER,,BLOCK IN FILE COUNTER
INI=16 ;OUT,,IN SWITCHES
P=17
;CHANS
T==1 ;TTY
I==2 ;INPUT
O==3 ;OUTPUT
;FLAGS IN F
CSWT==1B0
VSWT==1B1
GSWT==1B2
AROBIT==1B4
OUTSP==1B5
INSP==1B6
MULSWT==1B7
ANYSWT==1B8
;FLAGS IN INI
IBMCOM==4000
REWCOM==2000
; 1000 EVEN
; 600 DENSITY
UNLCOM==100
START: JFCL ;DEFEND AGAINST CCL CALL
RESET ;CLEAR PROGRAM [61]
MOVE P,[IOWD LN$PDL,PDLIST] ;INITIALIZE PDL [61]
INIT T,1 ;OPEN TTY: [61]
SIXBIT /TTY/
XWD TOB,TIB
HALT START
SETZM NOREWS ;CLEAR NO REWIND SWITCH
SETOM OUTLP ;PRESET TO INDICATE LOAD POINT
SETOM INLP ; ..
SETZM INISAV ;CLEAR DENSITY MEMORY
SETZM INDEV ;CLEAR INPUT DEVICE
SETZM OUDEV ;CLEAR OUTPUT DEVICE
MOVE LOC,[POINT 6,NAMDEV] ;GET COMMAND NAME [63]
SETZM NAMDEV ; .. [63]
SETZM RUNCMD ;CLEAR .RUN FLAG [61]
RESCAN 1 ;TRY FOR .RUN [61]
SKPINC ;SEE IF SOMETHING THERE [61]
JRST STAR ;NO--SKIP ON [61]
INPUT T, ;GET FIRST LINE [63]
STARC1: SKIPG TIB+2 ;SEE IF MORE [63]
JRST STAR ;NO--SKIP ON [63]
PUSHJ P,INCHR ;GET NEXT CHAR [61]
CAIGE A,40 ;SEE IF END YET [61]
JRST STAR ;YES--PROCEED [61]
CAIL A,"0" ;IF [63]
CAILE A,"Z" ; ALPHA- [63]
JRST STARC2 ; NUMERIC, [63]
CAILE A,"9" ; BUILD [63]
CAIL A,"A" ; COMMAND [63]
JRST [TRC A,40 ; NAME [63]
TLNE LOC,(77B5) ; .. [63]
IDPB A,LOC ; .. [63]
JRST STARC1] ; .. [63]
STARC2: CAIN A,":" ;SEE IF DEVICE: [63]
JRST [SETZM NAMDEV ;YES--START [63]
MOVE LOC,[POINT 6,NAMDEV] ; [63]
JRST STARC1] ; OVER [63]
MOVE B,['MTCOPY'] ;GET MATCH NAME [63]
EXCH B,NAMDEV ;PUT IN EASY PLACE [63]
MOVEI C,0 ;GET A NULL [63]
STARC3: TLNE LOC,(77B5) ;CLEAR [63]
JRST [IDPB C,LOC ; OUT [63]
JRST STARC3] ; MATCH [63]
CAMN B,NAMDEV ;COMPARE [63]
JRST STARC5 ;YES--GO SET FLAG [63]
STARC4: CAIN A,"(" ;SEE IF (...) [61]
JRST STARC5 ;YES--PROCEED [65]
SKIPG TIB+2 ;SEE IF MORE [63]
JRST STAR ;NO--ALL DONE [63]
PUSHJ P,INCHR ;YES--GET IT [63]
CAIGE A,40 ;SEE IF END OF LINE [63]
JRST STAR ;YES--ALL DONE [63]
JRST STARC4 ;NO--LOOP ON [63]
STARC5: AOS RUNCMD ;YES--SET FLAG [61]
JRST STAR1 ;AND ENTER AFTER LOOP TEST [61]
;HERE TO TYPE *
STAR: SOSN RUNCMD ;SEE IF DONE WITH .RUN (...) [61]
JRST ALLOVR ;YES--ALL OVER [61]
RESET
MOVE P,[IOWD LN$PDL,PDLIST]
INIT T,1
SIXBIT /TTY/
XWD TOB,TIB
HALT START
OUTPUT T,
MOVEI A,"*"
IDPB A,TOB+1
OUTPUT T,
STAR1: SETZB F,POSVAL
SETZB INI,POSVAL+1
SETZM POSVAL+2
SETZM POSVAL+3
SETOM NUMCOP ;PRESET TO COPY TO EOF
MOVE A,[600,,600] ;KEEP JUST
ANDM A,INISAV ; DENSITIES
DCODEM: MOVE LOC,[POINT 6,NAMDEV]
SETZM NAMDEV
JRST DCODE1
DCODE: TXO F,ANYSWT
DCODE1: PUSHJ P,INCHR
DCODEC: CAIL A,"0"
CAILE A,"Z"
JRST DLIM
CAILE A,"9"
CAIL A,"A"
JRST NAMPRT
DLIM: MOVEI D,NOCHRS
LDB C,[XWD 350700+D,CHRLST]
CAMN C,A
JRST @CHRLST(D)
SOJGE D,.-3
CAIN A,")" ;SEE IF END [61]
SKIPG RUNCMD ; OF .RUN (...) COMMAND [61]
SKIPA ;NO [61]
JRST COMENT ;YES--DONE [61]
;FALL INTO BADCOM
;FALL HERE FROM ABOVE
BADCOM: PUSHJ P,OUMES
ASCIZ /? Illegal command
/
ZAPIT: CLRBFI
JRST STAR
DEFINE XPR(A,B)
< BYTE (7)A (29)B >
CHRLST: XPR ":",DVICE
XPR "_",ARROW
XPR "=",ARROW
XPR "/",SWIT
XPR 11,DCODE1 ;TAB
XPR 12,RETURN
XPR 13,RETURN
XPR 14,RETURN
XPR 40,DCODE1 ;SPACE
XPR 50,SWITS ;(
XPR 73,COMENT ;;
XPR "!",COMENT
NOCHRS==.-CHRLST-1
NAMPRT: TRC A,40
TLNE LOC,(77B5)
IDPB A,LOC
JRST DCODE
;HERE WHEN ; SEEN
COMENT: PUSHJ P,INCHR
CAIL A,40 ;EAT UNTIL BREAK SEEN
JRST COMENT ; ..
JRST RETURN ;THEN GO PROCESS COMMAND
ARROW: TXOE F,AROBIT
JRST BADCOM
MOVSS INI
JRST DCODER
DVICE: MOVE B,NAMDEV
JUMPE B,BADCOM
DEVCHR B,
JUMPE B,NODEV
TXNN B,DV.MTA
JRST MTPLSE
MOVE B,NAMDEV
TXNE F,AROBIT
JRST INDVSP
CAME B,OUDEV ;SEE IF SAME AS LAST TIME
SETOM OUTLP ;NO--FLAG LOAD POINT
MOVEM B,OUDEV
TXOE F,OUTSP
JRST BADCOM
JRST DCODER
INDVSP: CAME B,INDEV ;SEE IF SAME AS LAST TIME
SETOM INLP ;NO--FLAG LOAD POINT
MOVEM B,INDEV
TXOE F,INSP
JRST BADCOM
DCODER: TXO F,ANYSWT
JRST DCODEM
NODEV: PUSHJ P,OUFMES
E$$NSD: 'NSD'
ASCIZ /No such device
/
JRST ZAPIT
MTPLSE: PUSHJ P,OUFMES
E$$MAR: 'MAR'
ASCIZ /Magtapes are required
/
JRST ZAPIT
SWITS: TXO F,MULSWT ;SET () FLAG
SWIT: PUSHJ P,INCHR ;GET SWITCH
SWITC: MOVSI D,-NUMSWT ;SCAN SWITCH TABLE
LDB C,[POINT 7,SWTCHS(D),6]
CAME C,A ;SEE IF MATCH
AOBJN D,.-2 ;LOOP UNTIL DONE
JUMPGE D,UNKSWT ;ERROR IF UNKNOWN SWITCH
LDB C,[POINT 6,SWTCHS(D),12]
LSH C,6 ;POSITION FILE FLAG IF ANY
JRST @SWTCHS(D) ;DISPATCH TO HANDLER
UNKSWT: PUSHJ P,OUFMES ;GIVE UNKNOWN SWITCH MESSAGE
E$$UKS: 'UKS'
ASCIZ /Unknown switch
/
JRST ZAPIT
DEFINE SET(A,B,C)
< BYTE (7)"A" (6)<C>/100 (23)B >
SWTCHS: BYTE (7)11 (6)0 (23)SWIT ;TAB
BYTE (7)40 (6)0 (23)SWIT ;SPACE
BYTE (7)51 (6)0 (23)CLSPAR ;)
SET 2,INISET,200
SET 5,INISET,400
SET 8,INISET,600
SET A,ADVCOM
SET B,BAKCOM
SET C,CSET
SET E,INISET,1000
SET G,GSET
SET H,HELP
SET I,INISET,IBMCOM
SET N,NORCOM
SET R,INISET,REWCOM
SET U,INISET,UNLCOM
SET V,VSET
NUMSWT==.-SWTCHS
;HERE ON /G
GSET: TXO F,GSWT ;SET /G FLAG
JRST SWTDON ;RETURN
;HERE ON SWITCH WHICH SETS FILE FLAG
INISET: TRNE C,600 ;SEE IF DENSITY
TRZ INI,600 ;YES--CLEAR OLD DENSITY
TRO INI,(C) ;SET FLAG
;HERE WHEN END OF ONE SWITCH
SWTDON: TXNN F,MULSWT ;SEE IF ()
JRST DCODE ;NO--RESUME REGULAR SCAN
JRST SWIT ;YES--CONTINUE SWITCH SCAN
;HERE WHEN )
CLSPAR: TXZE F,MULSWT ;CLEAR () FLAG
JRST DCODE ;IF WAS SET, RESUME SCAN
JRST BADCOM ;ELSE, ERROR
;HERE ON /H
HELP: HRROI A,.GTPRG
GETTAB A,
MOVE A,['MTCOPY']
PUSHJ P,.HELPR##
JRST STAR
;HERE ON /C:N OR /V:N
CSET: TXOA F,CSWT ;SET /C
VSET: TXO F,VSWT ;SET /V
MOVEI C,4 ;SET OFFSET FOR COPY COUNT
JRST CVSCAN ;GO GET NUMBER
;HERE ON /A:N OR /B:N
ADVCOM: TDZA C,C ;SET OFFSET OF 0
BAKCOM: MOVEI C,1 ;SET OFFSET OF 1
SETOM NOREWS ;CLEAR AUTO REWINDS
TXNN F,AROBIT ;SEE IF OUTPUT SIDE
ADDI C,2 ;YES--SLIDE DOWN
CVSCAN: PUSHJ P,INCHR ;GET NEXT CHAR
CAIE A,":" ;SEE IF ARGUMENT
JRST [CAIGE C,4
AOS POSVAL(C) ;NO JUST INCREMENT COUNTERS
JRST ABLPRT] ;COMPLETE
SETOM NOREWS ;/C:N OR /V:N IMPLIES /N
MOVEI B,0 ;CLEAR COUNTER
ABLOOP: PUSHJ P,INCHR ;GET DIGIT
CAIL A,"0" ;SEE IF DECIMAL
CAILE A,"9" ; ..
JRST ABLPEX ;NO--STORE NUMBER
IMULI B,^D10 ;YES--ADVANCE RESULT
ADDI B,-"0"(A) ;INCLUDE DIGIT
JRST ABLOOP ;AND TRY FOR ANOTHER
ABLPEX: MOVEM B,POSVAL(C) ;STORE AWAY
ABLPRT: TXO F,ANYSWT ;FLAG SOMETHING SEEN
TXNN F,MULSWT ;SEE IF MULT. SWIT.
JRST DCODEC ;NO--PROCEED ABOVE
JRST SWITC ;YES--CONTINUE SWITCHES
NORCOM: SETOM NOREWS ;SET NO REWIND FLAG
JRST SWTDON ;LOOP FOR NEXT SWITCH
SUBTTL INITIALIZE
;HERE AT END OF COMMAND SCAN--COMPLETE DEFAULT HANDLING
RETURN: TXNN F,AROBIT ;SEE IF = SEEN
MOVSS INI ;NO--RESWITCH FLAGS
TXNN F,ANYSWT ;TEST IF ANYTHING TYPED
JRST STAR ;NO--GIVE UP GRACEFULLY
SKIPE POSVAL+2 ;SEE IF OUTPUT /A
SKIPN POSVAL+3 ;YES--CHECK /B
JRST .+2 ;ONE OR NONE
JRST BADCOM ;BOTH, GIVE UP
TXNN F,AROBIT ;SEE IF = SEEN
JRST OUTINI ;NO--JUST SETUP OUTPUT FILE
SKIPE POSVAL ;SEE IF INPUT /A
SKIPN POSVAL+1 ;YES--CHECK /B
JRST .+2 ;ONE OR NONE
JRST BADCOM ;BOTH, GIVE UP
PUSH P,INI ;PRESERVE FILE FLAGS
SKIPN POSVAL ;SEE IF INPUT POSITIONING
SKIPE POSVAL+1 ; ..
TRZ INI,REWCOM ;YES--CLEAR REWIND
SKIPN POSVAL+2 ;SEE IF OUTPUT POSITIONING
SKIPE POSVAL+3 ; ..
TLZ INI,REWCOM ;YES--CLEAR REWIND
SKIPLE NUMCOP ;SEE IF /C:N OR /V:N
TDZ INI,[REWCOM,,REWCOM] ;YES--DON'T CLEAR /N
TRNN INI,REWCOM ;SEE IF /R LEFT
TLNE INI,REWCOM ;ON EITHER SIDE
SETZM NOREWS ;IF /R, THEN CLEAR /N
POP P,INI ;RESTORE USER'S SWITCHES
SKIPE NOREWS ;IF NOT /N
SKIPE OUTLP ; OR AT LOAD POINT,
TLO INI,REWCOM ; SET /R
SKIPE NOREWS ;IF NOT /N
SKIPE INLP ; OR AT LOAD POINT,
TRO INI,REWCOM ; SET /R
MOVE A,INISAV ;GET DEFAULT DENSITIES
TRNN INI,600 ;SEE IF INPUT DENSITY
TRO INI,(A) ;NO--SET DEFAULT
MOVSS A ;DO OUTPUT
TLNN INI,600 ;SEE IF OUTPUT DENSITY
TLO INI,(A) ;NO--SET DEFAULT
MOVEM INI,INISAV
TRZ INI,REWCOM!UNLCOM!IBMCOM
;INITIALIZE AND POSITION INPUT TAPE
SKIPN INDEV ;SEE IF A DEVICE
JRST BADCOM ;NO--GIVE UP
INIT I,34(INI)
INDEV: 0
EXP INHED
JSP A,NOTAVL
MOVE A,INISAV
TRNE A,IBMCOM
MTIND. I,
TRNE A,REWCOM
MTREW. I,
SKIPN B,POSVAL ;SEE IF /A
JRST INDEVX ;NO--PROCEED
MTSKF. I, ;YES--SKIP FILE
SOJG B,.-1 ; ENOUGH TIMES
INDEVX: SKIPN B,POSVAL+1 ;SEE IF /B
JRST INDEVY ;NO--PROCEED
MTBSF. I, ;YES--BACK FILE
SOJGE B,.-1 ; ENOUGH TIMES+1
MTWAT. I, ;WAIT TO FINISH
STATO I,IO.BOT ;SEE IF AT BEGINNING
MTSKF. I, ;NO--GO FORWARD ONE
INDEVY: MOVEI B,REWCOM ;GET /R SWITCH
STATZ I,IO.BOT ;SEE IF AT LOAD POINT
IORM B,INISAV ;YES--SET FLAG
;INITIALIZE AND POSITION OUTPUT TAPE
OUTINI: SKIPN OUDEV ;SEE IF OUTPUT FILE
JRST BADCOM ;NO--GIVE UP
HLRZS INI ;SWITCH TO OUTPUT FILE
HRLM INI,INISAV ;SAVE OUTPUT SWITCHES
TRZ INI,REWCOM!UNLCOM!IBMCOM
INIT O,34(INI)
OUDEV: 0
XWD OUHED,OUHED
JSP A,NOTAVL
MOVS A,INISAV
TRNE A,IBMCOM
MTIND. O,
TRNE A,REWCOM
MTREW. O,
SKIPN B,POSVAL+2 ;SEE IF /A
JRST OUDEVX ;NO--PROCEED
MTSKF. O, ;YES--SKIP FORWARD
SOJG B,.-1 ; ENOUGH
OUDEVX: SKIPN B,POSVAL+3 ;SEE IF /B
JRST OUDEVY ;NO--PROCEED
MTBSF. O, ;YES--SKIP BACK
SOJGE B,.-1 ; ENOUGH +1
MTWAT. O, ;WAIT TO COMPLETE
STATO O,IO.BOT ;SEE IF AT LOAD POINT
MTSKF. O, ;NO--SKIP FORWARD
OUDEVY: MOVSI B,REWCOM ;GET /R SWITCH
STATZ O,IO.BOT ;SEE IF AT LOAD POINT
IORM B,INISAV ;YES--SET /R FLAG
TXNN F,AROBIT
JRST WRAPOU ;IF JUST POSITION, WE ARE DONE
;COMPLETE INITIALIZATION AND TELL USER DENSITIES
TXNN F,CSWT+VSWT
TXO F,CSWT+VSWT
MOVE A,[XWD 400000,BUF1+1]
MOVEM A,INHED
HRRI A,BUF2+1
MOVEM A,OUHED
MOVE A,NUMCOP ;GET NUMBER OF COPIES
MOVEM A,NUMVER ;SET AS NUMBER OF VERIFIES
MOVEI A,I
MTCHR. A,
JRST NODENS
ANDI A,7
PUSH P,DENS(A)
MOVEI A,O
MTCHR. A,
JRST NODENS
ANDI A,3
PUSH P,DENS(A)
PUSHJ P,OUMES
ASCIZ /Density out at /
POP P,.+2
PUSHJ P,OUMES
ASCIZ /XXX/
PUSHJ P,OUMES
ASCIZ / BPI, in at /
POP P,.+2
PUSHJ P,OUMES
ASCIZ /XXX/
PUSHJ P,OUMES
ASCIZ / BPI
/
NODENS: TXNN F,CSWT
JRST VERFY
SETZB TOT,LOC
OUTPUT O,
SUBTTL COPY TAPE
CPYLUP: INPUT I,
COPY1: STATZ I,760000
JRST INERR
HRLZ A,INHED
HRR A,OUHED
AOBJN A,.+1
HRRZ B,INHED
HRRZ B,1(B)
CAIL B,MAXSIZ
JRST CTOLNG
ADDI B,(A)
BLT A,(B)
OUTPUT O,
STATO O,742000
AOJA LOC,CPYLUP
MOVE INI,OUDEV
GETSTS O,A
TRNE A,400000
JRST WLKERR
PUSHJ P,OUSTS
ASCIZ /output/
TRNE A,2000
JRST EOTERR
SETSTS O,(A)
AOJA LOC,CPYLUP
CTOLNG: PUSH P,B
JRST TOOLNG
EOTERR: PUSHJ P,OUFMES
E$$OTS: 'OTS'
ASCIZ /Output tape too short
/
JRST WRAPUP
WLKERR: PUSHJ P,OUFMES
E$$OWL: 'OWL'
ASCIZ /Output tape write lock error
/
JRST WRAPUP
DENS: ASCIZ /???/
ASCIZ /200/
ASCIZ /556/
ASCIZ /800/
ASCIZ /1600/
ASCIZ /6250/
ASCIZ /(6)/
ASCIZ /(7)/
INERR: STATO I,740000
JRST EOF
MOVE INI,INDEV
GETSTS I,A
PUSHJ P,OUSTS
ASCIZ /input/
SETSTS I,(A)
JRST COPY1
EOF: CLOSE O,
CLOSE I,
ADDI TOT,(LOC)
HLRS LOC
MOVSI LOC,1(LOC)
SOSN NUMCOP ;COUNT FILE COPIED
JRST EOFX ;IF THAT COMPLETES REQUEST, JUMP
INPUT I,
OUTPUT O,
SKIPGE NUMCOP ;SEE IF /C:N
STATO I,20000
JRST COPY1
CLOSE I,
CLOSE O,
HLRS LOC ;COUNT THIS FILE
MOVSI LOC,1(LOC) ; FOR STATISTICS
EOFX: PUSHJ P,OUSTAT
ASCIZ /copied
/
TXNN F,VSWT ;SEE IF /V ALSO
JRST WRAPUP ;NO--GO DO FINAL WRAPUP
MOVE A,INISAV
TRNE A,REWCOM
MTREW. I,
TRNE A,REWCOM
JRST EOFOUT
HLRZ B,LOC ;CAN'T REWIND, MUST BACKSPACE
MTBSF. I, ;BACK FILE
SOJGE B,.-1 ; ENOUGH +1
MTWAT. I, ;WAIT TO COMPLETE
STATO I,IO.BOT ;SEE IF AT LOAD POINT
MTSKF. I, ;NO--SKIP FILE
EOFOUT: TLNE A,REWCOM
MTREW. O,
TLNE A,REWCOM ;SEE IF /R
JRST VERFY ;YES--GO VERIFY
HLRZ B,LOC ;NO--MUST BACK UP
MTBSF. O, ;BACK FILE
SOJGE B,.-1 ; ENOUGH +1
MTWAT. O, ;WAIT TO COMPLETE
STATO O,IO.BOT ;SEE IF AT LOAD POINT
MTSKF. O, ;NO--SKIP FILE
SUBTTL VERIFY TAPE
VERFY: SETZB TOT,LOC
GETSTS I,A
TRZ A,20
SETSTS I,(A)
GETSTS O,A
TRZ A,20
SETSTS O,(A)
VERLUP: INPUT I,
VERF: STATZ I,760000
JRST IERR
VERF1: INPUT O,
STATZ O,760000
JRST OERR
VERF2: HRRZ C,INHED
HRRZ D,OUHED
ADD C,[A,,1]
ADD D,[A,,1]
MOVE A,(C)
CAME A,(D)
JRST NGLEN
CAIL A,MAXSIZ
JRST VTOLNG
MOVE B,@C
CAME B,@D
JRST DIFRNT
SOJG A,.-3
AOJA LOC,VERLUP
VTOLNG: PUSH P,A
TOOLNG: MOVE INI,INDEV
PUSHJ P,OUQUES
E$$BTL: MOVEI D,'BTL'
PUSHJ P,OUPFX
PUSHJ P,OULOC
ASCIZ /block length of /
POP P,A
PUSHJ P,OUNUM
PUSHJ P,OUMES
ASCIZ / too long
/
JRST WRAPUP
IERR: STATZ I,20000
JRST IEOF
MOVE INI,INDEV
GETSTS I,A
PUSHJ P,OUSTS
ASCIZ /input/
SETSTS I,(A)
JRST VERF1
OERR: STATZ O,20000
JRST OEOF
MOVE INI,OUDEV
GETSTS O,A
PUSHJ P,OUSTS
ASCIZ /input/
SETSTS O,(A)
JRST VERF2
IEOF: CLOSE I,
INPUT O,
MOVE INI,OUDEV
STATO O,20000
JRST O2BIGR
CLOSE O,
ADDI TOT,(LOC)
HLRS LOC
MOVSI LOC,1(LOC)
SOSN NUMVER ;COUNT AGAINST REQUEST
JRST IEOFX ;ALL DONE--FINISH UP
INPUT I,
SKIPGE NUMVER ;SEE IF /V:N
STATO I,20000
JRST VERF
INPUT O,
STATO O,20000
JRST O2BIGF
HLRS LOC ;COUNT THIS FILE
MOVSI LOC,1(LOC) ; FOR STATISTICS
IEOFX: PUSHJ P,OUSTAT
ASCIZ /verified
/
WRAPUP: MOVE A,INISAV
SKIPN NOREWS
TRNE A,UNLCOM
TRZ A,REWCOM
TRNE A,REWCOM
MTREW. I,
TRNE A,UNLCOM
MTUNL. I,
TRNE A,REWCOM!UNLCOM ;SEE IF /R OR /U
HLLZS INISAV ;YES--CLEAR DENSITY
SETZM INLP ;CLEAR LOAD POINT INDICATOR
TRNE A,REWCOM!UNLCOM ;SEE IF /R OR /U AT END
SETOM INLP ;YES--SET LOAD POINT INDICATOR
RELEAS I,
WRAPOU: MOVE A,INISAV
SKIPN NOREWS ;SEE IF /N
TLNE A,UNLCOM
TLZ A,REWCOM
TLNE A,REWCOM
MTREW. O,
TLNE A,UNLCOM
MTUNL. O,
TLNE A,REWCOM!UNLCOM ;SEE IF /R OR /U
HRRZS INISAV ;YES--CLEAR DENSITY
SETZM OUTLP ;CLEAR LOAD POINT INDICATOR
TLNE A,REWCOM!UNLCOM ;SEE IF /R OR /U AT END
SETOM OUTLP ;YES--SET LOAD POINT INDICATOR
RELEAS O,
JRST STAR
OEOF: MOVE INI,OUDEV
PUSHJ P,OUQUES
E$$OBI: MOVEI D,'OBI'
PUSHJ P,OUPFX
PUSHJ P,OULOC
ASCIZ /output EOF before input EOF
/
JRST WRAPUP
O2BIGR: PUSHJ P,OUQUES
E$$IBO: MOVEI D,'IBO'
PUSHJ P,OUPFX
PUSHJ P,OULOC
ASCIZ /input EOF before output EOF
/
JRST WRAPUP
O2BIGF: PUSHJ P,OUQUES
E$$IEO: MOVEI D,'IEO'
PUSHJ P,OUPFX
PUSHJ P,OULOC
ASCIZ /input double EOF before output double EOF
/
JRST WRAPUP
OUSTAT: HLRZ A,LOC
PUSHJ P,OUNUM
PUSHJ P,OUMES
ASCIZ / files, /
MOVE A,TOT
PUSHJ P,OUNUM
PUSHJ P,OUMES
ASCIZ / blocks /
JRST OUMES
SUBTTL SUBROUTINES
INCHR: SOSGE TIB+2
JRST [IN T,
JRST INCHR
STATO T,20000
JRST INCHR
MOVEI A,.CHCNZ
POPJ P,]
ILDB A,TIB+1
CAIE A,177
CAIN A,15
JRST INCHR
JUMPE A,INCHR
CAIL A,"A"+40
CAILE A,"Z"+40
JRST .+2
SUBI A,40
CAIE A,.CHCNC
CAIN A,.CHCNZ
ALLOVR: JRST [RESET
MONRT.
JRST STAR]
POPJ P,
OUSTS: MOVE D,(P)
MOVE C,(D)
MOVEM C,OUSTSM
MOVE C,1(D)
MOVEM C,OUSTSM+1
PUSH P,A
PUSHJ P,OUWAQU
E$$STS: MOVEI D,'STS'
PUSHJ P,OUPFX
PUSHJ P,OULOC
OUSTSM: ASCIZ /XXXXX/
PUSHJ P,OUMES
ASCIZ / error /
MOVE A,(P)
MOVEI RDX,10
PUSHJ P,OURDX
PUSHJ P,OUMES
ASCIZ /
/
POP P,A
TRZ A,740000
POP P,D
TXNE F,GSWT
JRST 2(D)
JRST WRAPUP
NOTAVL: PUSHJ P,OUQUES
E$$DNA: MOVEI D,'DNA'
PUSHJ P,OUPFX
MOVE D,-3(A)
PUSHJ P,TYP6B2
PUSHJ P,OUMES
ASCIZ /not available
/
JRST STAR
NGLEN: PUSHJ P,OUWAQU
E$$LNA: MOVEI D,'LNA'
PUSHJ P,OUPFX
PUSHJ P,OUPLC
ASCIZ /lengths do not agree
/
JRST BADVER
DIFRNT: PUSHJ P,OUWAQU
E$$VRE: MOVEI D,'VRE'
PUSHJ P,OUPFX
PUSHJ P,OUPLC
ASCIZ /verification error
/
BADVER: TXNN F,GSWT
JRST WRAPUP
AOJA LOC,VERLUP
OULOC: PUSHJ P,TYP6BT
OUPLC: PUSHJ P,OUMES
ASCIZ /file /
HLRZ A,LOC
PUSHJ P,NUMOUT
PUSHJ P,OUMES
ASCIZ /, blk /
HRRZ A,LOC
PUSHJ P,NUMOUT
PUSHJ P,OUSPAC
JRST OUMES
NUMOUT: AOS A
OUNUM: MOVEI RDX,^D10
OURDX: IDIV A,RDX
HRLM B,(P)
JUMPE A,.+2
PUSHJ P,OURDX
HLRZ C,(P)
ADDI C,"0"
JRST OUCHR
OUFMES: PUSHJ P,OUQUES ;FATAL ERROR
HRRZ D,(P) ;GET PREFIX
PUSHJ P,OUPFX ;ISSUE PREFIX
AOS (P) ;ADVANCE PC
PJRST OUMES ;GO ISSUE TEXT
OUPFX: HRLI D,'MTY' ;ADD MTCOPY PREFIX
GTMSG. C ;GET /MESSAGE LEVEL
TXNE C,JW.WPR ;SEE IF :NOPREFIX
PUSHJ P,TYP6B2 ;NO--ISSUE PREFIX
PJRST OUSPAC ;OUTPUT SPACE
TYP6BT: MOVE D,INI
TYP6B2: PUSHJ P,TYPSIX
PUSHJ P,OUCOL
JRST OUSPAC
TYPSIX: MOVEI C,0
LSHC C,6
ADDI C,40
PUSHJ P,OUCHR
JUMPN D,.-4
POPJ P,
OUMES: HRR D,(P)
HRLI D,440700
ILDB C,D
JUMPE C,.+3
PUSHJ P,OUCHR
JRST .-3
POP P,C
OUTPUT T,
JRST 1(D)
OUCOL: MOVEI C,":"
JRST OUCHR
OUWAQU: TXNE F,GSWT
OUWARN: SKIPA C,["%"]
OUQUES: MOVEI C,"?"
CAIN C,"?"
CLRBFI
PJRST OUCHR
OUSPAC: MOVEI C," "
OUCHR: SOSG TOB+2
OUTPUT T,
IDPB C,TOB+1
POPJ P,
XLIST ;LIT
LIT
LIST
SUBTTL STORAGE
PDLIST: BLOCK LN$PDL+1
TIB: BLOCK 3
TOB: BLOCK 3
RUNCMD: BLOCK 1
INHED: XWD 400000,BUF1+1
BLOCK 2
OUHED: XWD 400000,BUF2+1
BLOCK 2
NOREWS: BLOCK 1
OUTLP: BLOCK 1
INLP: BLOCK 1
INISAV: BLOCK 1
NAMDEV: BLOCK 1
POSVAL: BLOCK 4 ;IN/A, IN/B, OUT/A, OUT/B
NUMCOP: BLOCK 1 ;MUST FOLLOW POSVAL
NUMVER: BLOCK 1
BUF1: REPEAT NUMBUF-1,<XLIST
0
XWD MAXSIZ,.+MAXSIZ+2
BLOCK MAXSIZ
LIST>
0
XWD MAXSIZ,BUF1+1
BLOCK MAXSIZ
BUF2: REPEAT NUMBUF-1,<XLIST
0
XWD MAXSIZ,.+MAXSIZ+2
BLOCK MAXSIZ
LIST>
0
XWD MAXSIZ,BUF2+1
BLOCK MAXSIZ
END START