.; .; AFTER.ALL .; COMMAND FILE TO BUILD AFTER TASK .; AND EXTRACT AFTER.TXT TEXT FILE .; @AFTER.ALL ! BUILDS TASK AND EXTRACTS AFTER.TXT .; @AFTER.ALL TXT ! EXTRACTS AFTER.TXT .; @AFTER.ALL BLD ! BUILDS AFTER.TSK .; .IF P1 EQ "TXT" .GOTO TXT .OPEN AFTER.MAC;111 .ENABLE DATA .TITLE AFTER .IDENT /13JN83/ ;+ ; AFTER PROGRAM ; PROGRAM TO CONNECT TO A RUNNING TASK ; THEN SPAWN A COMMAND LINE OR LINES TO MCR ; ; WRITTEN BY: DAVID J. STRAIT 06-MAR-82 ; APPLIED DYNAMICS INTERNATIONAL ; ; REVISION: 16-MAR-82 DJS ; 13-JUN-83 DJS (USE EPRINT) ; COMMAND SYNTAX: ; >AFTer tsknam command line ; or ; >AFT tsknam&cmdline1&cmdline2&... ; or ; >AFT &cmdline1&cmdlin2&... ; WHERE: ; tsknam - is the installed name of task to wait for ; & - indicates that AFT must wait for MCR spawned task to exit ; & - also separates multiple commands to MCR ; ; NOTE: ; If any task exits with an error code > 1 then AFT will exit with ; that status. ; ; OUTPUT: ; ON ERROR SPAWN EPRINT TASK ; EXIT STATUS - 4 IF ERROR ; ELSE EXIT STATUS OF TASK OR MCR ; ; TO BUILD: ; >MAC AFTER;1=AFTER ; >TKB ; TKB>AFTER;1/CP/-FP=AFTER ; TKB>/ ; TKB>UNITS=0 ; TKB>ACTFIL=0 ; TKB>STACK=64 ; TKB>TASK=...AFT ; TKB>// ; ; SUBROUTINE CALLS: ; $CAT5 - CONVERT FROM ASCII TO RAD50 ;- .MCALL GMCR$,DIR$,EXST$S,SPWN$,CNCT$,STSE$S,SDRC$,STOP$S AFTER:: MOV #10.,ERRST ; SET ERROR STATUS TO ERROR DIR$ #GMCR ; GET COMMAND LINE MOVB $DSW,R5 ; GET CHARACTER COUNT BMI 9900$ ;-- ERROR, EXIT MOV #GMCR+2,R4 ; POINT TO COMMAND LINE ADD #GMCR+2,R5 ; POINT TO END OF LINE ; ; POINT PAST SPACE IN COMMAND LINE ; 10$: CMP R4,R5 ; ? END OF COMMAND LINE ? BEQ 9900$ ;-- YES, ERROR RETURN CMPB (R4)+,#40 ; ? SPACE ? BNE 10$ ;-- NO, TRY AGAIN ; ; GET TASK NAME ; CMP R4,R5 ; ? END OF LINE ? BEQ 9900$ ;-- YES, ERROR EXIT CMPB (R4),#'& ; ? SKIPING WAIT FOR TASK ? BEQ 30$ ;-- YES, SKIP MOV R4,R0 ; SET ADDRESS MOV #1,R1 ; ALLOW "." CLR C.NCTN+CONN+2 ; CLEAR 2NT 3 CHARACTERS CALL $CAT5 ; GET 1ST 3 CHARACTERS MOV R1,C.NCTN+CONN ; AND STORE BCS 20$ ;-- JUST <3 CHARACTERS, SKIP CALL $CAT5 ; GET REST MOV R1,C.NCTN+CONN+2; AND STORE 20$: MOV R0,R4 ; RESTORE POINTER ; ; CONNECT TO TASK AND WAIT ; DIR$ #CONN ; CONNECT TO TASK BCS 9000$ ;-- ERROR, EXIT STSE$S #1 ; WAIT FOR TASK EXIT CMP STAT,#1 ; CHECK TASK EXIT STATUS BHI 9010$ ;-- ERROR, EXIT ; ; SETUP SPAWN ; 30$: CLR R3 ; RESET WAIT FLAG INC R4 ; SKIP SPACE OR '&' 40$: MOV R4,SPAWN+S.PWCA ; SET ADDRESS MOV R5,SPAWN+S.PWCL ; AND LENGTH SUB R4,SPAWN+S.PWCL ; BLE 9990$ ;-- ZERO, EXIT CMPB -1(R4),#'& ; ? WAIT FLAG SET ? BNE 100$ ;-- NO, SKIP MOV R4,R3 ; YES SEARCH FOR ANOTHER '&' 50$: CMP R4,R5 ; ? END OF LINE ? BEQ 100$ ;-- YES, SPAWN COMMAND LINE CMPB (R4)+,#'& ; NO, ? END OF THIS COMMAND ? BNE 50$ ;-- NO, TRY NEXT MOV R4,R0 ; GET COUNT SUB R3,R0 ; DEC R0 ; WITHOUT '&' MOV R0,SPAWN+S.PWCL ; AND STORE 100$: DIR$ #SPAWN ; SPAWN COMMAND LINE BCS 9000$ ;-- ERROR, EXIT TST R3 ; WAIT FLAG SET BEQ 9990$ ;-- NO, EXIT STSE$S #2 ; WAIT FOR TASK CMP STAT,#1 ; ? EXIT OK ? BLOS 40$ ;-- YES, DO NEXT COMMAND BR 9010$ ;-- NO, PRINT MESSAGE ; ; DSW ERROR ; 9000$: MOVB $DSW,ERRST ; GET ERROR MOVB #-1,ERRST+1 ; BR 9900$ ;-* SEND TO ERROR MESSAGE TASK ; ; STATUS ERROR ; 9010$: MOV STAT,ERRST ; GET ERROR CODE ; ; SEND ERROR ; 9900$: DIR$ #SNDDAT ; SEND STATUS BCS 9999$ ;-- ERROR EXIT STOP$S ; STOP UNTIL DONE BR 9999$ ;-* AND EXIT ; ; EXIT OK ; 9990$: MOV STAT,ERRST ; GET EXIT STATUS OF SPAWN ; ; EXIT ; 9999$: EXST$S ERRST ; ** EXIT ** HALT ; JUST IN CASE ; ; DPBS SNDDAT: SDRC$ EPRINT,ERRST,,, ; SEND DATA TO "EPRINT" ERRST: .WORD 0 ; STORAGE FOR EXIT STATUS .WORD 3 ; UNSTOP AFTER ERROR FLAG .BLKW 11 ; REST OF SEND BUFFER CONN: CNCT$ DUMMY,1,,STAT ; CONNECT TO TASK STAT: .BLKW 8. ; STATUS EXIT FROM TASK ; GMCR: GMCR$ ; SPAWN: SPWN$ MCR...,,,,,2,,STAT,GMCR+2,4,0 .END AFTER .DISABLE DATA .CLOSE .OPEN AFTER.TKB;111 .ENABLE DATA AFTER;1/-FP,AFTER;1/-SP/-WI=AFTER / UNITS=0 ACTFIL=0 STACK=16 TASK=...AFT // .DISABLE DATA .CLOSE .IF P1 EQ "BLD" .GOTO BLD .TXT: .OPEN AFTER.TXT .ENABLE DATA AFTER PROGRAM PROGRAM TO CONNECT TO A RUNNING TASK THEN SPAWN A COMMAND LINE OR LINES TO MCR COMMAND SYNTAX: >AFTer tsknam command line or >AFT tsknam&cmdline1&cmdline2&... or >AFT &cmdline1&cmdlin2&... WHERE: tsknam - is the installed name of task to wait for & - indicates that AFT must wait for MCR spawned task to exit & - also separates multiple commands to MCR NOTE: If any task exits with an error code > 1 then AFT will exit with that status. OUTPUT: ON ERROR SPAWN EPRINT TASK EXIT STATUS - 4 IF ERROR ELSE EXIT STATUS OF TASK OR MCR .DISABLE DATA .CLOSE .IF P1 EQ "TXT" .GOTO END .BLD: .; .; MAC AFTER;1=AFTER TKB @AFTER.TKB;111 PIP AFTER.OBJ;1,AFTER.MAC;111,AFTER.TKB;111/DEL .END: