.TITLE JOB - BATCH JOB SUBMISSION FACILITY ;----------------------------------------------------------------------; ; MODULE: JOB ; ; LANGUAGE: DEC PDP-11 MACRO ASSEMBLY LANGUAGE (V3.2) ; ; SYSTEM: DEC PDP-11 RUNNING UNDER RSX-11M V3.2 ; ; MOSTEK CORPORATION ; ; COMPUTER AIDS TO DESIGN DIVISION ; ; 1215 WEST CROSBY ROAD ; ; CARROLLTON, TEXAS 75006 ; ; (214) 323-8813 ; ;----------------------------------------------------------------------; ; PROGRAMMER: KEVIN KLUGHART ; ;----------------------------------------------------------------------; ; DATE: 04-14-82 @ 06:00 CDST ; ;----------------------------------------------------------------------; ; PURPOSE: THIS UTILITY PROGRAM ALLOWS A USER TO SUBMIT ; ; BATCH JOBS WITHIN THE RSX-11M ENVIRONMENT. ; ; THIS ENABLES SUBMISSION OF PROCEDURE FILES ; ; TO RUN IN BACKGROUND MODE, WHILE MAIN TASKS ; ; RUN IN THE FOREGROUND. ; ; ; ; >JOB ttn: batch-file ; ; ; ; WHERE ttn: IS THE TERMINAL DEVICE AND UNIT ; ; NUMBER OF THE TI: UNIT FOR THE BATCH FILE ; ; AND batch-file IS THE FILE TO BE SUBMITTED ; ; AS THE BATCH COMMAND PROCEDURE. ; ;----------------------------------------------------------------------; .IDENT /V01.00/ ; CURRENT RELEASE .PSECT $DATA .ENABLE LC .SBTTL PROGRAM PARAMETERS ;----------------------------------------------------------------------; ; ; ; ; ; PROGRAM PARAMETERS ; ; ; ; ; ;----------------------------------------------------------------------; ; LOGICAL UNIT ASSIGNMENTS ; ;----------------------------------------------------------------------; TILUN = 000001 ; USER COMMAND INPUT ;----------------------------------------------------------------------; ; EVENT FLAG ASSIGNMENTS ; ;----------------------------------------------------------------------; TIFLAG= TILUN ; EVENT FLAG FOR TERMINAL I/O ;----------------------------------------------------------------------; ; CHARACTER PARAMETERS ; ;----------------------------------------------------------------------; BLANK = 040 ; ASCII PAD CHARACTER .SBTTL EXTERNAL MACROS ;----------------------------------------------------------------------; ; ; ; ; ; EXTERNAL MACROS ; ; ; ; ; ;----------------------------------------------------------------------; ; EXECUTIVE DIRECTIVE MACROS ; ;----------------------------------------------------------------------; .MCALL DIR$ ; EXECUTE EXECUTIVE DIRECTIVE .MCALL EXIT$S ; EXIT TASK .MCALL QIOW$S ; QUEUE I/O REQUEST AND WAIT .MCALL SPWN$ ; SPAWN TASK ;----------------------------------------------------------------------; ; FILE PROCESSING MACROS ; ;----------------------------------------------------------------------; .MCALL FINIT$ ; INITIALIZE FILE PROCESSING .MCALL FSRSZ$ ; ALLOCATE FSR REGION ;----------------------------------------------------------------------; ; COMMAND LINE PROCESSING MACROS ; ;----------------------------------------------------------------------; .MCALL GCML$ ; GET MCR COMMAND LINE .MCALL GCMLB$ ; GET MCR COMMAND LINE BUFFER DEFINITION .MCALL GCMLD$ ; DEFINE OFFSETS FOR GCMLB$ .SBTTL LOCAL MACRO DEFINITIONS ;----------------------------------------------------------------------; ; ; ; ; ; LOCAL MACRO DEFINITIONS ; ; ; ; ; ;----------------------------------------------------------------------; ; ERROR REPORTING MACRO ; ;----------------------------------------------------------------------; ; THIS MACRO ALLOWS THE PROGRAMMER TO SPECIFY AN ERROR VALUE OR ; ; ALLOW THE ERROR MACRO TO SPECIFY AN ERROR INDEX WHICH IS PUT ; ; IN REGISTER R5 PRIOR TO TRAPPING BY AN ODD ADDRESS TRAP. ; ;----------------------------------------------------------------------; .MACRO ERROR ERR,ERRBYT .IF NDF $$$ERR ; DEFINE ERROR COUNT IF FIRST INVOCATION $$$ERR= 0 ; INITIALIZE ERROR COUNT .ENDC .NARG $$$ERC ; COMPUTE NUMBER OF ERROR ARGUMENTS $$$ERR= $$$ERR+1 ; *********** ERROR INDEX *********** .PRINT $$$ERR ; *********** ERROR INDEX *********** MOVB #$$$ERR,R5 ; GET ERROR INDEX POINTER ASL R5 ; SHIFT ERROR TO UPPER 3 OCTAL DIGITS (XXX.000) ASL R5 ; ASL R5 ; ASL R5 ; ASL R5 ; ASL R5 ; ASL R5 ; ASL R5 ; ASL R5 ; RESULT IS CNT.ERR (000.000) .IF NE $$$ERC ; IF NUMBER OF ARGUMENTS IS NOT ZERO, SHOW ERROR BISB ERR,R5 ; GET ERROR NUMBER .ENDC .IF EQ $$$ERC-2 ; IF 2 ARGUMENTS, LOAD R4 WITH ERROR BYTE MOVB ERRBYT,R4 ; GET ERROR BYTE .ENDC TST .+1 ; EXIT WITH FATAL ODD ADDRESS TRAP .ENDM ;----------------------------------------------------------------------; ; ; ; PRINT MESSAGE TO CONSOLE MACRO ; ; ; ;----------------------------------------------------------------------; ; THIS MACRO ALLOWS THE USER TO QUEUE A MESSAGE TO THE USER ; ; TERMINAL, AND LOGS THE MESSAGE TO THE OPERATOR CONSOLE ; ;----------------------------------------------------------------------; .MACRO PRINT MSG,LEN,SPC .NARG $$$CNT ; GET NUMBER OF ARGUMENTS MOV MSG,MS.PTR ; GET ADDRESS OF MESSAGE TO PRINT MOV LEN,MS.LEN ; GET LENGTH OF MESSAGE .IF EQ $$$CNT-2 ; FOR 2 ARGUMENTS MOV #40,MS.SPC ; SINGLE SPACE OUTPUT .ENDC .IF EQ $$$CNT-3 ; FOR 3 ARGUMENTS MOV SPC,MS.SPC ; SELECT CARRIAGE CONTROL .ENDC CALL $MSG ; PRINT THE MESSAGE .ENDM ; END OF PRINT MACRO .SBTTL DIRECTIVE PARAMETER BLOCKS (DPB'S) ;----------------------------------------------------------------------; ; ; ; ; ; DIRECTIVE PARAMETER BLOCKS ; ; ; ; ; ;----------------------------------------------------------------------; ; SET UP GET COMMAND LINE BUFFERS FOR USER INPUT ; ;----------------------------------------------------------------------; ; FORMAT FOR GCML MACRO: GCMLB$ MAXD,PRMPT,UBUF,LUN,PDL,SIZE ; ;----------------------------------------------------------------------; .EVEN GETMCR: GCMLB$ 1,JOB ;----------------------------------------------------------------------; ; SPAWN MCR COMMAND LINE ; ;----------------------------------------------------------------------; ; FORMAT: SPWN$ TNAME,,,[UGC],[UMC],[EFN],[EAST],[ESB], ; ; [CMDLIN],[CMDLEN],[UNUM],[DNAM] ; ;----------------------------------------------------------------------; SPAWN: SPWN$ MCR...,,,200,200,,,,,,0,TT .SBTTL DATA BUFFERS ;----------------------------------------------------------------------; ; ; ; ; ; DATA BUFFERS ; ; ; ; ; ;----------------------------------------------------------------------; ; FILE STORAGE REGION ; ;----------------------------------------------------------------------; .EVEN FSRSZ$ 2,,$DATA ; ONLY TWO FILES HERE: INPUT/MCR .SBTTL OPERATOR MESSAGES ;----------------------------------------------------------------------; ; ; ; ; ; OPERATOR MESSAGES ; ; ; ; ; ;----------------------------------------------------------------------; ; DEFINE MESSAGE DESCRIPTOR ; ;----------------------------------------------------------------------; .EVEN MS.PTR: .BLKW 1 ; MESSAGE POINTER MS.LEN: .BLKW 1 ; MESSAGE LENGTH MS.SPC: .BLKW 1 ; MESSAGE CARRIAGE CONTROL ;----------------------------------------------------------------------; ; DEFINE QIO STATUS BLOCK WHICH RETURNS I/O COMPLETION STATUS ; ;----------------------------------------------------------------------; IOSTAT: .BLKW 1 ; COMPLETION STATUS + DEVICE DATA BYTCNT: .BLKW 1 ; I/O TRANSFER COUNT (BYTES) ;----------------------------------------------------------------------; ; OPERATOR MESSAGES ; ;----------------------------------------------------------------------; ; INVALID TERMINAL SPECIFICATION ; ;----------------------------------------------------------------------; MC.TIE: .ASCII /*** Invalid Device Name - Aborting ***/ MC.TIL= .-MC.TIE ;----------------------------------------------------------------------; ; MISSING BATCH FILE SPECIFICATION ; ;----------------------------------------------------------------------; MC.ERR: .ASCII /*** Missing Batch File Specification - Aborting ***/ MC.ERL= .-MC.ERR .SBTTL JOB - MAIN PROGRAM INITIALIZATION ;----------------------------------------------------------------------; ; ; ; ; ; ; ; JOB - MAIN PROGRAM INITIALIZATION ; ; ; ; ; ; ; ;----------------------------------------------------------------------; ; INITIALIZE FILE SYSTEM PROCESSING ; ;----------------------------------------------------------------------; .PSECT JOB .EVEN START: FINIT$ ; INITIALIZE FILE SYSTEM PROCESSING .SBTTL GET A COMMAND LINE FROM THE USER ;----------------------------------------------------------------------; ; ; ; ; ; GET A COMMAND LINE FROM THE USER ; ; ; ; ; ;----------------------------------------------------------------------; ; USE MCR INTERFACE TO GET USER COMMAND ; ;----------------------------------------------------------------------; GETCMD: GCML$ #GETMCR ; GET MCR COMMAND LINE TSTB GETMCR+G.ERR ; ANY ERROR? BEQ PARSE ; NO, PARSE COMMAND LINE ;----------------------------------------------------------------------; ; ERROR IN GETTING COMMAND: EITHER EOF OR SOME FATAL ERROR ; ;----------------------------------------------------------------------; CMPB GETMCR+G.ERR,#GE.EOF ; END-OF-FILE IN INPUT? BNE 10$ ; NO, SOME FATAL GCML ERROR JMP EXIT ; YES, EXIT TASK 10$: ERROR GETMCR+G.ERR ; INFORM USER OF FATAL ERROR .SBTTL PARSE USER COMMAND STRING ;----------------------------------------------------------------------; ; ; ; ; ; PARSE USER COMMAND STRING ; ; ; ; ; ;----------------------------------------------------------------------; ; SKIP PAST COMMAND NAME ; ;----------------------------------------------------------------------; PARSE: MOV GETMCR+G.CMLD+2,R0 ; GET ADDRESS OF COMMAND LINE MOV GETMCR+G.CMLD,R1 ; GET COMMAND LENGTH ;----------------------------------------------------------------------; ; ; ; LOAD TI: SPECIFICATION FOR BATCH JOB IF PRESENT ; ; ; ;----------------------------------------------------------------------; CMPB #':,3(R0) ; TTN: OR VTN: SPECIFIED? BNE 10$ ; NO, SKIP TERMINAL PROCESSING ;----------------------------------------------------------------------; ; LOAD TERMINAL NAME ; ;----------------------------------------------------------------------; MOVB (R0)+,SPAWN+S.PWDN ; GET FIRST BYTE OF TERMINAL NAME MOVB (R0)+,SPAWN+S.PWDN+1 ; GET SECOND BYTE OF TERMINAL NAME ;----------------------------------------------------------------------; ; LOAD TERMINAL UNIT NUMBER ; ;----------------------------------------------------------------------; MOVB (R0)+,R2 ; GET ASCII UNIT NUMBER BIC #177600,R2 ; CLEAR UPPER BYTE AND PARITY BIT SUB #60,R2 ; CONVERT ASCII TO DECIMAL MOV R2,SPAWN+S.PWVT ; SAVE TERMINAL NUMBER TSTB (R0)+ ; SKIP ':' IN DEVICE SPECIFICATION SUB #4,R1 ; ADJUST COMMAND LENGTH ;----------------------------------------------------------------------; ; ; ; SKIP BLANKS IN COMMAND LINE AND ADD '@' AS FIRST BYTE ; ; ; ;----------------------------------------------------------------------; 10$: CMPB #BLANK,(R0)+ ; IS THIS A BLANK? BNE 20$ ; NO, PROCESS COMMAND BEGINNING DEC R1 ; DECREMENT COMMAND LENGTH BNE 10$ ; IF NONZERO, THEN CHECK NEXT BYTE ;----------------------------------------------------------------------; ; ERROR - NO COMMAND STRING PRESENT ; ;----------------------------------------------------------------------; PRINT #MC.ERR,#MC.ERL,#60 ; REPORT ERROR TO USER JMP EXIT ; TERMINATE EXECUTION ;----------------------------------------------------------------------; ; ; ; SPAWN COMMAND AS A BATCH COMMAND ; ; ; ;----------------------------------------------------------------------; ; ADJUST COMMAND LENGTH AND ADD INDIRECT BATCH INDICATOR ; ;----------------------------------------------------------------------; 20$: SUB #2,R0 ; POINT TO -1 BYTE OF COMMAND MOVB #'@,(R0) ; ADD INDIRECT COMMAND INDICATOR INC R1 ; ADJUST COMMAND LENGTH MOV R0,SPAWN+S.PWCA ; LOAD COMMAND ADDRESS MOV R1,SPAWN+S.PWCL ; LOAD COMMAND LENGTH DIR$ #SPAWN ; SPAWN COMMAND BCC 30$ ; BRANCH ON NO ERROR PRINT #MC.TIE,#MC.TIL,#60 ; INFORM USER OF DIRECTIVE ERROR ERROR $DSW ; SIGNAL DIRECTIVE EXECUTION ERROR ;----------------------------------------------------------------------; ; CHECK TO SEE IF ANY OTHER SUBMISSION COMMANDS ARE REQUIRED ; ;----------------------------------------------------------------------; 30$: JMP GETCMD ; GET ANOTHER COMMAND .SBTTL PRINT MESSAGE TO USER TERMINAL ;----------------------------------------------------------------------; ; ; ; ; ; PRINT MESSAGE TO USER TERMINAL ; ; ; ; ; ;----------------------------------------------------------------------; ; THIS SUBROUTINE PRINTS A MESSAGE TO THE USER TERMINAL ; ;----------------------------------------------------------------------; ; REGISTER USEAGE: MS.PTR - ADDRESS OF USER MESSAGE ; ; MS.LEN - LENGTH OF USER MESSAGE ; ; MS.SPC - PRINT CARRIAGE CONTROL ; ;----------------------------------------------------------------------; ; QUEUE MESSAGE TO OPERATOR ; ;----------------------------------------------------------------------; $MSG:: QIOW$S #IO.WVB,#TILUN,#TIFLAG,,#IOSTAT,, BCC 10$ ; CHECK FOR I/O ERRORS ERROR $DSW ; SIGNAL DIRECTIVE EXECUTION ERROR ;----------------------------------------------------------------------; ; CHECK FOR SUCCESSFUL I/O COMPLETION ; ;----------------------------------------------------------------------; 10$: CMPB #IS.SUC,IOSTAT ; NORMAL SUCCESSFUL COMPLETION? BEQ 20$ ; YES, RETURN TO MAINLINE CODE ERROR IOSTAT ; NO, INFORM USER OF QIO ERROR 20$: RETURN ; RETURN TO MAINLINE CODE .SBTTL TASK TERMINATION ;----------------------------------------------------------------------; ; ; ; TASK TERMINATION ; ; ; ;----------------------------------------------------------------------; EXIT: EXIT$S ; EXIT TASK .END START ; END OF MAIN PROGRAM