.; .; DLY.ALL .; COMMAND FILE TO BUILD DLY TASK .; AND EXTRACT DLY.TXT TEXT FILE .; @DLY.ALL ! BUILDS TASK AND EXTRACTS DLY.TXT .; @DLY.ALL TXT ! EXTRACTS DLY.TXT .; @DLY.ALL BLD ! BUILDS DLY.TSK .; .IF P1 EQ "TXT" .GOTO TXT .OPEN DLY.MAC;111 .ENABLE DATA .TITLE DLY .IDENT /16DE80/ ;+ ; DLY PROGRAM ; PROGRAM TO DELAY THEN SPAUN A COMMAND TO MCR ; ; WRITTEN BY: DAVID J. STRAIT 15-DEC-80 ; APPLIED DYNAMICS INTERNATIONAL ; ; LAST REVISION: 16-DEC-80 DJS ; ; COMMAND SYNTAX: ; ; >DLY nnnU,command ; >DLY nnnU ; >DLY nnnU command ; ; WHERE: ; nnn - is a deciamal number ; U - is the delay units (H,M,S,T) default is S ; Hours,Minuts,Seconds,Ticks ; command - is optional command to mcr ; ; TO BUILD: ; >MAC DLY;1=DLY ; >TKB ; TKB>DLY;1/CP=DLY ; TKB>/ ; TKB>UNITS=0 ; TKB>ACTFIL=0 ; TKB>STACK=64 ; TKB>TASK=...DLY ; TKB>// ; ; SYSTEM CALLS: ;- .MCALL GMCR$,SPWN$,DIR$,EXST$S,MRKT$S,STOP$S DLY:: MOV #4,ERRST ; SET ERROR STATUS TO ERROR DIR$ #GMCR ; GET COMMAND LINE MOV $DSW,R3 ; GET CHARACTER COUNT BMI 9999$ ; ERROR EXIT MOV #GMCR+2,R4 ; POINT TO COMMAND LINE ; ; POINT PAST SPACE IN COMMAND LINE ; 10$: DEC R3 ;> DEC COUNT BEQ 9999$ ; END OF LINE EXIT CMPB (R4)+,#40 ; ? SPACE ? BNE 10$ ;--NO TRY AGAIN ; ; GET NUMBER ; CLR R1 ; SET COUNT TO 0 MOV #2,R5 ; SET UNITS TO SECONDS 20$: DEC R3 ;> DEC COUNT MOVB (R4)+,R0 ; GET CHARACTER CMPB R0,#'0 ;? A NUMBER? BLT 50$ ;--NO POSSABLY A COMMA CMPB R0,#'9 ; BGT 30$ ;--NO POSSABLY H,M, OR S SUB #'0,R0 ; YES MAKE NUMBER MUL #10.,R1 ; SHIFT DIGIT ADD R0,R1 ; AND ADD TO COUNT BR 20$ ;-* TRY NEXT ; ; FIND UNITS ; 30$: MOV #4,R5 ; SET UNITS TO HOURS CMPB #'H,R0 ; ? UNITS HOURS BEQ 40$ ;--YES SKIP DEC R5 ; NO SET TO MINUTES CMPB #'M,R0 ; ? UNITS MINUTES? BEQ 40$ ;--YES SKIP DEC R5 ; NO SET TO SECONDS CMPB #'S,R0 ; ? UNITS SECONDS? BEQ 40$ ;--YES SKIP CMPB #'T,R0 ; ? UNITS TICKS ? BNE 50$ ;--NO SKIP TO TRY COMMA DEC R5 ; YES SET TO TICKS 40$: DEC R3 ; DEC COUNT MOVB (R4)+,R0 ; GET COMMA ; ; LOOK FOR COMMA OR SPACE ; 50$: TST R3 ; ? END OF LINE ? BLE 60$ ;--YES SKIP TO DELAY CMPB R0,#54 ; ? COMMA ? BEQ 60$ ;--YES DO IT CMPB R0,#40 ; ? SPACE ? BNE 9999$ ;--NO ERROR RETURN ; ; STORE COUNT, UNITS, AND BUFFER LENGTH ; 60$: MOV R1,COUNT ; MOV R5,UNITS ; MOV R3,SPAWN+S.PWCL ; BLE 100$ ;--SKIP TO MARK TIME ; ; JUSTIFY COMMAND LINE ; MOV #GMCR+2,R5 ; POINT TO COMMAND LINE 70$: MOVB (R4)+,(R5)+ ;> SHIFT DEC R3 ; DEC COUNT BGT 70$ ;--UNTIL DONE ; ; DO MARK TIME ; 100$: MRKT$S #1,COUNT,UNITS,#150$ ; MARK TIME STOP$S ; STOP FOR AST BR 200$ ;-* EXIT 150$: TST SPAWN+S.PWCL ; COMMAND TO SPAWN? BLE 200$ ;--NO SKIP DIR$ #SPAWN ; SPAWN TO MCR 200$: MOV #1,ERRST ; SUCCESSFUL 9999$: EXST$S ERRST ;** EXIT WITH STATUS ** ; ; DATA LOCATIONS ; ERRST: .WORD 0 COUNT: .WORD 0 UNITS: .WORD 0 ; ; DPB'S ; GMCR: GMCR$ ; SPAWN: SPWN$ MCR...,,,,,,,,GMCR+2,4,0 .END DLY .DISABLE DATA .CLOSE .OPEN DLY.TKB;111 .ENABLE DATA DLY;1/CP=DLY / UNITS=0 ACTFIL=0 STACK=64 TASK=...DLY // .DISABLE DATA .CLOSE .IF P1 EQ "BLD" .GOTO BLD .TXT: .OPEN DLY.TXT .ENABLE DATA DLY PROGRAM PROGRAM TO DELAY THEN SPAWN A COMMAND TO MCR COMMAND SYNTAX: >DLY nnnU,command >DLY nnnU >DLY nnnU command WHERE: nnn - is a deciamal number U - is the delay units (H,M,S,T) default is S Hours,Minuts,Seconds,Ticks command - is optional command to mcr .DISABLE DATA .CLOSE .IF P1 EQ "TXT" .GOTO END .; .BLD: MAC DLY;1=DLY;111 TKB @DLY.TKB;111 PIP DLY.MAC;111,DLY.OBJ;1,DLY.TKB;111/DE .END: