.TITLE BATCH .IDENT /X02.0R/ ; ; DEVICES 1 VT3: ; 2 LOGFILE ; 3 COMMAND FILE ; .MCALL QIOW$S,PUT$,GET$,QIOW$C,QIOW$,OPEN$W,CLOSE$ .MCALL FDBDF$,FDAT$A,FDRC$A,FDOP$A,NMBLK$,ALUN$C .MCALL PUT$R,GET$R,OPEN$M,FINIT$,OFNB$R,FSRSZ$ .mcall gtim$c, HDRDF$, DELET$, TCBDF$,EXIT$S,DIR$ TCBDF$ HDRDF$ FSRSZ$ 2 ;2 FILES CMD & LOG CMDFDB: FDBDF$ FDRC$A FD.RAN,RECBUF,64. FDOP$A 3,CDSDS LOGFDB: FDBDF$ FDAT$A R.VAR,FD.CR FDRC$A ,LOGBUF,132. FDOP$A 2,,LOGFNB LOGFNB: NMBLK$ BATCH,LOG,0,SY,0 LOGBUF: .BLKB 132. LOGPTR: .WORD LOGBUF $tsknm: .word 0 FLAGS: .WORD 0 RECBUF: .BYTE 0 RECBF1: .BYTE 0 RECBF2: .BLKB 132. RECLEN: .WORD 0 RECNO: .WORD 0 RECPRI: .WORD 0 ISIOSB: .WORD 0,0 ISINBF: .BLKB 90. COUNT: .WORD 0 CDSDS: .WORD 4,CDEV,5,CUIC,12.,CFIL CDEV: .ASCII /SY0:/ CUIC: .ASCII /[1,7]/ CFIL: .ASCII /QUEUEMAN.SYS/ EOJMSS: .ASCIZ /BYE/<15> HDRMSS: .ASCII /$RUN BY BATCH Y03.1R ON / DATBUF: .ASCII / AT / TIMBUF: .ASCII / ON BA0:/ HDRLEN=.-HDRMSS ERRMSS: .ASCII /$BA.... -- *FATAL* FILE FORMAT ERROR/ ERRLEN=.-ERRMSS RUNPRM: .ASCIZ %/TASK=BA0/PRI=3/CKP=YES/SLV=NO% CMMCR: .ASCIZ /MCR>/ CMEOF: .ASCIZ /^Z/ .EVEN VTQIOW: QIOW$ IO.RLB,1,1,,ISIOSB,, UCB: .WORD 0 .MCALL MRKT$S,WTSE$S START: ;HERE INSERT CODE TO FIND BA0 IF AVAIL AND GET ITS UCB ADDRESS ALUN$C 1,BA,0 BCS KILL 1$: OPEN$M #CMDFDB BCC NXTFIL MRKT$S #1,#5,#1 WTSE$S #1 BR 1$ NXTFIL: CLR RECPRI CLR RECNO MOV #1,CMDFDB+F.RCNM+2 1$: GET$R R0,#RECBUF BCS 10$ MOV CMDFDB+F.NRBD+2,R5 CMP (R5),#<^RBA.> BNE 1$ CMP 4(R5),RECPRI BLO 1$ MOV 4(R5),RECPRI MOV CMDFDB+F.RCNM+2,RECNO BR 1$ 10$: TST RECNO BNE FOUND ;NO WORK -- EXIT CLOSE$ R0 KILL: EXIT$S FOUND: DEC RECNO MOV RECNO,CMDFDB+F.RCNM+2 GET$R R0,#RECBUF DEC CMDFDB+F.RCNM+2 BIS #100000,RECBUF+4 PUT$R R0,#RECBUF CLOSE$ ;HERE WITH DATA RECORD CALL $SWSTK,11$ MOV $HEADR,R1 MOV H.LUN(R1),R2 111$: CMP R2,U.RED(R2) BEQ 112$ MOV U.RED(R2),R2 BR 111$ 112$: MOV RECBUF+6,R3 MOV R3,H.CUIC(R1) MOV R3,H.DUIC(R1) MOV R3,U.UIC(R2) MOV R3,U.LUIC(R2) BIC #U2.LOG,U.CW2(R2) MOV R2,UCB RETURN ;** HERE SET UP OUR UIC **** 11$: FINIT$ MOV #CMDFDB+F.FNB,R0 MOV #RECBUF+14,R1 MOV #10,R2 12$: MOV (R1)+,(R0)+ SOB R2,12$ CLR (R0)+ CLR (R0)+ MOV #5,R2 13$: MOV (R1)+,(R0)+ SOB R2,13$ MOV RECBUF+10,FLAGS CLRB CMDFDB+F.RACC OFNB$R #CMDFDB ;READ ON SY: BCS EOFIL ;NO GOOD GO TO NEXT FILE CLR RECLEN CALL PRINTF ;PRINT THE FILE TST FLAGS BMI 14$ CLOSE$ #CMDFDB ;CLOSE BR EOFIL ;AND TO NEXT 14$: DELET$ #CMDFDB EOFIL: OPEN$M R0,,,#FD.RAN,,#64. ;NOW NULL OUT RECORD.... BCC 2$ MRKT$S #1,#5,#1 WTSE$S #1 BR EOFIL 2$: MOV #RECBUF,R5 MOV #32.,R4 1$: CLR (R5)+ SOB R4,1$ PUT$R ,#RECBUF,#64.,RECNO JMP NXTFIL PRINTF: MOV #LOGFNB+N.FNAM,R0 MOV #RECBUF+22,R1 MOV #3,R2 1$: MOV (R1)+,(R0)+ SOB R2,1$ OPEN$W #LOGFDB GTIM$C RECBUF MOV #RECBUF,R1 MOV #DATBUF,R0 CALL $DAT MOV #TIMBUF,R0 MOV #3,R2 CALL $TIM PUT$ #LOGFDB,#HDRMSS,#HDRLEN MOV #LOGBUF,LOGPTR CALL NCMD RTS PC JOB: MOV #RECBUF,R5 MOV RECLEN,R1 INC R1 ;INCLUDE THE '$' CALL LSTLIN BR NCMD RUN: CALL ISBATCH BCC ERR MOV #RECBF1,R0 ADD RECLEN,R0 MOV #RUNPRM,R1 4$: MOVB (R1)+,(R0)+ BNE 4$ MOV #RECBF1,R5 MOVB #15,-(R0) TSTB (R0)+ MOV R0,R1 SUB R5,R1 CALL PUTCMD BR NCMD MCR: CALL ISBATCH BCC ERR MOV RECLEN,R1 SUB #2,R1 MOVB #15,RECBUF+3(R1) MOV #RECBUF+4,R5 CALL PUTCMD NCMD: GET$ #CMDFDB,#RECBUF,#132. BCS EOJ MOV CMDFDB+F.NRBD,RECLEN BLE NCMD DEC RECLEN ;RECLEN IS LENGTH-1ST HEADER CHAR CMPB RECBUF,#'* BEQ DAT CMP RECLEN,#3 BLO NCMD CMPB RECBUF,#'$ BNE ERR MOV RECLEN,R1 CLRB RECBUF+1(R1) MOVB RECBF1,R0 CMP R0,#'R ;$RUN BEQ RUN CMP R0,#'M BEQ MCR ;$MCR CMPB R0,#'J BEQ JOB ;$JOB CMPB R0,#'E ;$EOJ BEQ EOJ CMPB R0,#'Z ;$ZZZ BEQ EOF ERR: PUT$ #LOGFDB,#ERRMSS,#ERRLEN EOJ: CALL ISBATCH STOP: MOV #eojmss,r5 MOV #4,r1 call putcmd call isbatch CALL LOGLIN CLOSE$ #LOGFDB RTS PC EOF: MOV #1,RECLEN MOVB #26.,RECBF1 br dat1 DAT: MOV RECLEN,r1 movb #15,RECBF1(r1) INC reclen dat1: CALL ISBATCH BCS ERR ;NOT IN INPUT WAIT MOV #RECBF1,R5 MOV RECLEN,R1 QIOW$S #IO.WLB,#1,#1,,,, CALL LSTLIN ;LSTLIN FORCES EOL. BR NCMD PUTCMD: QIOW$S #17000,#1,#1,,,, call LSTLIN RTS PC .MCALL WTSE$,MRKT$ M1: MRKT$ 7,11,1 M2: WTSE$ 7 ISBATC: 1$: DIR$ #M1 DIR$ #M2 MOV #17400,VTQIOW+Q.IOFN DIR$ #VTQIOW TST ISIOSB+2 BEQ 3$ CMPB ISIOSB+3,#IO.WLB/400 BEQ 2$ ;IT WANTS TO WRITE CLC ;IT IS IN INPUT WAIT RETURN 2$: MOV #IO.RLB,VTQIOW+Q.IOFN DIR$ #VTQIOW MOV #ISINBF,R5 MOV ISIOSB+2,R1 TSTB ISIOSB+1 BEQ 4$ CALL LSTLIN BR ISBATCH 4$: MOVB (R5)+,R2 CALL LOGCH SOB R1,4$ BR ISBATCH 3$: CALL ISVTJOB BCC ISBATCH 50$: RETURN ; LSTLIN: tst r1 ble loglin MOVB (R5)+,R2 CALL LOGCH SOB R1,LSTLIN LOGLIN: MOV LOGPTR,R2 MOVB #32.,(R2)+ SUB #LOGBUF,R2 BLE 1$ PUT$ #LOGFDB,#LOGBUF,R2 1$: MOV #LOGBUF,LOGPTR MOV #'$,R2 LOGCH: CMPB #26.,R2 BNE 1$ MOV #'^,R2 CALL 1$ MOV #'Z,R2 1$: CMPB #15,R2 BEQ 4$ CMPB R2,#12 BEQ LOGLIN MOVB R2,@LOGPTR INC LOGPTR CMP LOGPTR,#LOGBUF+132. BGE LOGLIN 4$: RTS PC ISVTJOB: CALL $SWSTK,40$ CLR $TSKNM ;NOT SEEN YET MOV $TSKHD,R5 20$: TST T.TCBL(R5) ;END OF LIST BEQ 30$ ;YES EOL BIT #TS.EXE,T.STAT(R5) ; BNE 25$ CMP UCB,T.UCB(R5) BNE 25$ COM $TSKNM 30$: RETURN 25$: MOV T.TCBL(R5),R5 BR 20$ ;GO ON 40$: TST $TSKNM BEQ 41$ CLC RTS PC 41$: SEC RTS PC .END START