; ;+7 ; .HEADERLEVEL 1 R2 DEC R1 ;BACK UP OVER THAT CHAR CMPB R2,#', ;ANOTHER ARGUMENT? BNE 1$ ;IF NOT, BRANCH JSR R4,GTRGPI ;IF SO, GET 5 WORDS ON STACK .BYTE 2,0 LDCIF (SP)+,AC2 ;VAR HEADER ADD -> AC2 LDF (SP)+,AC1 ;OFFSET -> AC1 ADD #4,SP ;GET RID OF VARIABLE VALUE BR 2$ 1$: CLRF AC2 ;INDICATE NO OUTPUT 2$: JSR PC,PARCHK ;CHECK FINAL PAREN MOV (SP)+,R4 ;POP LEN AND MOV (SP)+,R3 ;ADDRESS OF COMMAND STRING MOV R4,R2 ;COPY LEN INC R2 ;AND ROUND IT UP BIC #1,R2 ;TO NEAREST WORD SUB R2,SP ;MAKE ROOM ON STACK (EVEN BOUNDARY!) MOV SP,R5 ;COPY NEW ADDRESS MOV SP,R0 ;TWICE MOV R2,-(SP) ;AND SAVE ITS LENGTH BEQ 10$ ;IF ZERO LENGTH, WHY DID WE TRY? 3$: MOVB (R3)+,(R0)+ ;MOVE IN THE COMMAND STRING SOB R2,3$ SUB #20,SP ;MAKE ROOM FOR RETURNED STATUS MOV SP,R3 ;AND COPY ITS ADDRESS ; ;CONDITIONAL TAKEN OUT, BOTH IAS AND 11M NOW CAN DO SPAWN ;OLD CODE FOR REESE "MC" HANDLERS IS LEFT IN, BUT COMMENTED OUT CLR -(SP) ;VTUN MOV R4,-(SP) ;CMDLEN MOV R5,-(SP) ;CMDLIN TSTF AC2 ;DO WE HAVE RETURNED VARIABLE? CFCC BNE 5$ ;IF SO, BRANCH CLR R3 ;ELSE SET NO EXIT STATUS BLOCK 5$: MOV R3,-(SP) ;ESB ADD (OR LACK OF) -> STACK CLR -(SP) ;EAST (NO AST) MOV #3,R4 ;SET EVENT FLAG NUMBER CFCC ;CHECK ON WHETHER WE'RE WAITING BNE 6$ ;IF YES, BRANCH CLR R4 ;ELSE CLEAR EVENT FLAG 6$: MOV R4,-(SP) ;EFN MOV UICSTO,-(SP) ;UIC WE'RE UNDER CLR -(SP) ;PRI CLR -(SP) ;PARTITION CLR -(SP) ;NAME LDCIF R1,AC3 ;SAVE TEXT PTR ; ; DO RAD50 CONVERSION OF FIRST 3 CHARS IN COMMAND LINE ; MOV R5,R0 ;ADDRESS OF COMMAND LINE MOV #1,R1 ;JUST IN CASE ...AT. JSR PC,$CAT5 ;DO CONVERSION ; ; GO CHECK FOR MFT FUNCTIONS OR MAS FUNCTIONS ; .IF NDF RSX11M JSR PC,CHKMFT .ENDC ; MOV R1,-(SP) ;2ND HALF OF TASK NAME STCFI AC3,R1 ;RESTORE R1 (TEXT PTR) MOV (PC)+,-(SP) ;NOW FIRST HALF OF NAME .RAD50 /.../ MOV (PC)+,-(SP) ;AND DIRECTIVE CODE AND LEN .BYTE 11.,13. EMT 377 BCC 7$ ;IF DIRECTIVE GOOD, BRANCH LDCIF @#$DSW,AC0 ;ELSE RETURN ERROR CODE BR 8$ ;AND GO STORE 7$: TSTF AC2 ;ARE WE WAITING? CFCC BEQ 9$ ;IF NOT, BRANCH JSR PC,DETACH ;DETACH THE TERMINAL FOR THE DURATION STSE$S #3 ;WAIT FOR EVENT FLAG LDCIF (SP),AC0 ;RETURNED EXIT STATUS -> AC0 JSR PC,ATTACH ;NOW RE-ATTACH TERMINAL ; ; NOW CODE FOR RSX11D V6.2 ; ; ALUN$S #2,#"MC,#0 ;ASSIGN TERMINAL LUN TO MC ; QIOW$S #IO.WVB,#2,#1,,R3,, ; BCC 5$ ;IF OK, BRANCH ; LDCIF @#$DSW,AC0 ;RETURN BAD DIRECTIVE STATUS ; BR 6$ ;AND GO TO COMMON FINISH CODE ;5$: LDCIF (R3),AC0 ;STORE RETURNED STATUS CODE ;6$: ALUN$S #2,#"TI,#0 ;AND REASSIGN TERMINAL LUN ; 8$: STCFI AC2,R3 ;HEADER ADD -> R3 BEQ 9$ ;IF NONE, BRANCH JSR PC,STONUM ;STORE THE RESULT 9$: ADD #20,SP ;WIPE EXIT STATUS BLOCK 10$: MOV (SP)+,R0 ;GET EVEN LENGTH OF COMMAND LINE ADD R0,SP ;AND ADJUST STACK RTS PC ;AND RETURN ;SUB TO CHANGE REQUESTED TASK NAME TO ...MFT OR ...MAS ;IF IT IS NECESSARY ; ;ENTRY WITH R1 CONTAINING 2ND HALF OF MCR TASK NAME IN RAD50 ; .IF NDF RSX11M CHKMFT:: MOV R4,-(SP) MOV R5,-(SP) MOV #MFTNUM,R5 ;SET TO CHECK FOR MFTNUM MFT NAMES MOV #MFTNAM,R4 ;SET TO START OF MFT NAME TABLE 6$: CMP R1,(R4)+ ;COMPARE REQ'D TASK WITH MFT TASK BEQ 7$ ;BR IF WE MATCH SOB R5,6$ ;LOOP TILL 8. NAMES CHECKED MOV #MASNUM,R5 ;SET LOOP COUNT FOR MASNUM MASSAGE NAMES MOV #MASNAM,R4 ;SET TO START OF MASSAGE NAME TABLE 66$: CMP R1,(R4)+ ;COMPARE REQ'D TASK NAME WITH MASSAGE NAME BEQ 77$ ;BR IF WE MATCH SOB R5,66$ ;ELSE TRY 7 MASSAGE NAMES BR 88$ ;NO MATCH, RETURN WITH SAME NAME IN R1 7$: MOV #^RMFT,R1 ;CHANGE REQUESTED TASK NAME TO "MFT" BR 88$ 77$: MOV #^RMAS,R1 ;CHANGE REQUESTED TASK NAME TO "MAS" 88$: MOV (SP)+,R5 MOV (SP)+,R4 RTS PC ; MFTNAM: ;TABLE OF POSSIBLE MFT TASK NAMES .RAD50 /ABOALTCANDISENAFIXRESUNF/ X=.-MFTNAM MFTNUM=X/2 MASNAM: ;TABLE OF POSSIBLE MASSAGE TASK NAMES .RAD50 /BLODIRPRIDOCPURRECSUBTYPPROUNPFRE/ Y=.-MASNAM MASNUM=Y/2 .ENDC .END