.TITLE BATCH SUBMITTAL TASK .IDENT /V01.1B/ .ENABL AMA ; ; THIS TASK WILL SUBMIT JOBS TO THE BATCH PROCESSOR OF AN IAS SYSTEM ;AT SET TIMES. FOR EXAMPLE IT WILL SUBMIT A FILE AT A SET TIME OF DAY ;FOR: ; 1) EVERY DAY OF THE WEEK ; 2) ONLY WEEKDAYS ; 3) ONLY WEEKENDS ; 4) ONLY ON A SPECIFIC DAY OF THE WEEK ; 5) ANY LOGICAL COMBINATION OF DAYS (EG. MON&THU&SUN) ; ; THE FILE CONTAINING THE SUBMISSION INFORMATION IS SY0:[1,4]BATCHJOB.SUB ;THE FORMAT OF THE FILE IS COLUMN DEPENDENT ;COLUMN 1 - 5 CONTAINS THE TIME OF DAY IN THE FORM HH:MM ;COLUMN 6 BLANK ;COLUMN 7 - 9 CONTAINS THE DAY THE FILE IS TO BE SUBMITTED IN THE ; FORM OF AN OCTAL NUMBER WHERE THE DAY IS ENCODED AS ; A BIT POSITION WITH MON = 1, TUE = 2, WED = 4,THU = 10, ; FRI = 20, SAT = 40, SUN = 100. THUS WEEKDAYS WOULD BE ; MON&TUE&WED&THU&FRI = 37(8). ;COLUMN 10 BLANK ;COLUMN 11 - ENDOFLINE THE FILENAME IN STANDARD RSX FORM DEV:[UIC]FILENAME.EXT;VERSION ; ; ; ; T H E F I L E M U S T B E I N C H R O N O L O G I C A L ; ======= ; O R D E R B Y T I M E O F D A Y ! ! ! ! ! ! ! .PAGE .MCALL FCSMC$ .MCALL DIR$,QIOW$,QIOW$S,EXIT$S,MOUT$S,CSRQ$ .MCALL VSDR$,SCHD$,CSI$,CSI$1,CSI$2 FCSMC$ LUN1= 1 LUN2= 2 COLUN= 3 TILUN= 4 MOLUN= 5 EFLAG= 20. BUF1.SZ= 80. TIMOFF= 0 DAYOFF= 6. FILOFF= 10. .PAGE .SBTTL DATA AREA .NLIST BEX FSRSZ$ 2 FDB1: FDBDF$ ;FDB FOR COMMAND FILE FDRC$A ,BUF1,BUF1.SZ FDOP$A LUN1,DSPT1 FDB2: FDBDF$ ;FDB FOR SUBMIT FILE FDOP$A LUN2,CSIBLK+C.DSDS DSPT1: .WORD DVSZ,DVNAM .WORD DIRSZ,DIRNAM .WORD FILSZ,FILNAM DVNAM: .ASCII /SY0:/ DVSZ=.-DVNAM .EVEN DIRNAM: .ASCII /[1,4]/ DIRSZ=.-DIRNAM .EVEN FILNAM: .ASCII /BATCHJOB.SUB/ FILSZ=.-FILNAM .EVEN DFNB: NMBLK$ ,BIS,,SY,0 XQIO: .WORD XQLN,XQIOSM XQIOSM: .ASCII /SY0:[1,2]QIOSYM.MSG/ XQLN=.-XQIOSM .EVEN SNDDPB: VSDR$ SPR...,,,,,SNDBUF,13. SCHDPB: SCHD$ BATJOB,,125. CANCEL: CSRQ$ BATJOB BUF1: .BLKB BUF1.SZ SNDBUF: .ASCII /BA/ ;DEVICE .BYTE 0 ;UNIT .BYTE 100. ;PRIORITY. .BYTE 1 ;FORMS=0, COPIES=1 .BYTE 110 ;INSERT--NO DELETE SNDFID: .BLKW 10. ;FILE ID NEWTIM: HOUR: .WORD 0 MINUTE: .WORD 0 SECOND: .WORD 0 TDYDAY: .WORD 0 DUEDAY: .WORD 0 CSI$ CSIBLK: .BLKB C.SIZE .EVEN BAD: .ASCII /BAD FILENAME FOUND/ BASIZ=.-BAD .EVEN BTIM: .ASCII /BAD TIME PARAMETERS/ BTSIZ=.-BTIM .EVEN BDIR: .ASCII /BAD DIRECTIVE RETURN/ BDSIZ=.-BDIR .EVEN .LIST BEX .PAGE .SBTTL CODE AREA START: FINIT$ ;INIT FSR DIR$ #CANCEL ;CANCEL SCHEDULED REQUESTS OPEN$R #FDB1 ;OPEN COMMAND FILE BCC 5$ ;BR IF OK MOVB FDB1+F.ERR,R5 ;LOAD ERROR CALL ERROR ;PRINT IT BR 46$ ; 5$: CALL DAYBIT ;GET CURRENT DAY AS A BIT MOV R0,TDYDAY ;STORE FOR LATER 10$: GET$ #FDB1,#BUF1,#BUF1.SZ ;GET A RECORD BCC 20$ ;BR IF OK CMPB #IE.EOF,FDB1+F.ERR ;EOF ERROR? BNE 15$ ;NOPE CLR HOUR ;+ CLR MINUTE ; SCHEDULE FOR CLR SECOND ; 00:00:00 CALL SCH ;- BR 45$ ; 15$: MOVB FDB1+F.ERR,R5 ;LOAD ERROR CALL ERROR ;PRINT IT BR 45$ ; 20$: CALL TIMCVT ;CONVERT TIME CMP HOUR,TIMBUF+G.TIHR ;THIS OUR HOUR? BEQ 30$ ;YUP BLT 10$ ;NOT FAR ENOUGH YET 25$: CALL SCH ;SCHEDULE FOR THIS TIME BR 45$ ; 30$: CMP MINUTE,TIMBUF+G.TIMI ;THI OUT MINUTE? BEQ 35$ ;YES BLT 10$ ;NOPE BR 25$ ;SCHEDULE 35$: BIT TDYDAY,DUEDAY ;THIS A GOOD DAY TO DIE? BEQ 10$ ;NOPE 40$: CALL SUBMIT ;SUBMIT THIS FILE BR 10$ ;TRY FOR ANOTHER 45$: CLOSE$ #FDB1 ;CLOSE 46$: EXIT$S ; .PAGE .SBTTL SUBROUTINES TIMCVT: MOV R0,-(SP) ;SAVE MOV R1,-(SP) ;SAVE MOV #BUF1+TIMOFF,R0 ;+ CALL $CDTB ; CONVERT MOV R1,HOUR ; ASCII CALL $CDTB ; STRING MOV R1,MINUTE ; TO MOV #BUF1+DAYOFF,R0 ;GET DUE DAY CALL $COTB ;CONVERT TO BINARY MOV R1,DUEDAY ;STORE IT FOR LATER MOV (SP)+,R1 ;UNSAVE MOV (SP)+,R0 ;UNSAVE RETURN ERROR: NEG R5 ;NEGATE ERROR NUMBER MOUT$S #XQIO,,R5 ;PRINT IT RETURN SCH: MOV HOUR,SCHDPB+S.CHHR ;LOAD HOUR MOV MINUTE,SCHDPB+S.CHMI ;LOAD MINUTE CLR SCHDPB+S.CHSC ;CLEAR SECONDS CLR SCHDPB+S.CHCT ;CLEAR TICKS DIR$ #SCHDPB ;SCHEDULE OURSELF TST $DSW ;SUCCESS? BPL 10$ ;YES CMP $DSW,#-93. ;BAD TIME PARAMETERS? BNE 5$ ;NOPE QIOW$S #IO.WVB,#COLUN,#EFLAG,,,,<#BTIM,#BTSIZ,#40> 5$: QIOW$S #IO.WVB,#COLUN,#EFLAG,,,,<#BDIR,#BDSIZ,#40> 10$: RETURN ; SUBMIT: MOV FDB1+F.NRBD,R1 ;GET RECORD SIZE SUB #FILOFF,R1 ;SIZE OF FILENAME STRING CSI$1 #CSIBLK,#BUF1+FILOFF,R1 ;PARSE AND SYNTAX BCC 10$ ;BR IF OK QIOW$S #IO.WVB,#COLUN,#EFLAG,,,, QIOW$S #IO.WVB,#COLUN,#EFLAG,,,,<#BAD,#BASIZ,#40> BR 20$ ; 10$: CSI$2 #CSIBLK,OUTPUT ;FORM DATASET DESCRIPTOR MOV #FDB2,R0 ;+ MOV #FDB2+F.FNB,R1 ; PREPARE MOV #CSIBLK+C.DSDS,R2 ; FOR CLR R3 ;PARSE CALL .PARSE ;- BCC 15$ ;BR IF OK 12$: MOVB FDB2+F.ERR,R5 ;LOAD ERROR CALL ERROR ;PRINT IT BR 20$ ; 15$: CALL .FIND ;LOCATE FILE BCS 12$ ;BR IF ERROR MOV #SNDFID,R1 ;+ MOV FDB2+F.FNB+N.DVNM,(R1)+ ; MOV FDB2+F.FNB+N.UNIT,(R1)+ ; MOV FDB2+F.FNB+N.DID,(R1)+ ; MOV FDB2+F.FNB+N.DID+2,(R1)+ ; MOV FDB2+F.FNB+N.DID+4,(R1)+ ; MOV FDB2+F.FNB+N.FNAM,(R1)+ ; MOV FDB2+F.FNB+N.FNAM+2,(R1)+ ; MOV FDB2+F.FNB+N.FNAM+4,(R1)+ ; MOV FDB2+F.FNB+N.FTYP,(R1)+ ; MOV FDB2+F.FNB+N.FVER,(R1)+ ;- DIR$ #SNDDPB ;SEND TO SPR... 20$: RETURN .PAGE DAYBIT: ; THIS ROUTINE WILL GIVE THE DAY OF THE WEEK FOR THE CURRENT ; DATE. ; RETURN: ; R0 -- CONTAINS THE BIT CORRESPONDING TO THE CURRENT DAY ; ; DAYSWK= 7 DAYPYR= 365. DAYPLR= 366. LEAPYR= 4 .MCALL GTIM$S GTIM$S #TIMBUF ;GET TODAY'S TIME PARAMETERS CLR R0 ;SET FOR DOUBLE PRECISION DIVIDE MOV TIMBUF+G.TIYR,R1;GET YEARS SINCE 1900 DIV #LEAPYR,R0 ;R0 HAS # LEAP YEARS SINCE 1900 MOV TIMBUF+G.TIYR,R4;R1 IS FLAG (0 => THIS IS LEAP YEAR) SUB R0,R4 ;R4 HAS # YEARS NOT LEAP YEAR TST R1 ;THIS A LEAP YEAR? BEQ 5$ ;YES DECREMENT # OF LEAP YEARS DEC R4 ;ELSE DECREMENT # OF NON LEAP YEARS BR 6$ ; 5$: DEC R0 ; 6$: MUL #DAYPYR,R4 ;TOTAL # DAYS IN YEARS MOV R0,R2 ;SAVE IT MUL #DAYPLR,R2 ;GET TOTAL # DAYS IN LEAP YEARS ADD R3,R5 ;ADD TOGETHER ADC R2 ;.... ADD R2,R4 ;R4-R5 HAVE TOTAL # DAYS TO JAN 1 THIS YEAR MOV #MONTHS,R2 ;START OF MONTHS TABLE MOV TIMBUF+G.TIMO,R3;GET THIS MONTH DEC R3 ;TAKE OFF THIS ONE BEQ 3$ ;BR IF THIS IS JAN ADD (R2)+,R5 ;ADD IN JAN IF APPROPRIATE ADC R4 ;.... DEC R3 ; BEQ 3$ ;BR IF THIS IS FEB ADD (R2)+,R5 ;ADD IN FEB DAYS IF NEEDED ADC R4 ;.... TST R1 ;THIS A LEAP YEAR? BNE 1$ ;NOPE INC R5 ;YUP ADD IN ONE DAY ADC R4 ;... 1$: DEC R3 ; BEQ 3$ ; 2$: ADD (R2)+,R5 ;ADD IN REST OF MONTHS ADC R4 ;.... SOB R3,2$ ;.... 3$: MOV TIMBUF+G.TIDA,R3;GET DAYS IN THIS MONTH ADD R3,R5 ;ADD THEM IN ADC R4 ;.... DIV #DAYSWK,R4 ;DIVIDE BY # DAYS PER WEEK MOV #1,R0 ;LOAD A BIT ASH R5,R0 ;SHIFT IT OVER RETURN ; TIMBUF:.BLKW 8. MONTHS: .WORD 31. ;JAN .WORD 28. ;FEB .WORD 31. ;MAR .WORD 30. ;APR .WORD 31. ;MAY .WORD 30. ;JUN .WORD 31. ;JUL .WORD 31. ;AUG .WORD 30. ;SEP .WORD 31. ;OCT .WORD 30. ;NOV .WORD 31. ;DEC .END START