.TITLE SPEAK MESSAGE TRANSFER VIA SPAWN DIRECTIVE .LIST ME .MCALL SPWN$S,WTSE$S,GTSK$S .IDENT /M02.../ ; ; CORAL TRANSFERS ; ; R5 POINTS TO STACK ; R5 +0 NUMBER OF PARAMETERS ; R5 +2 PARAMETERS ; ; SPEAK:: ;CORAL CALL 'IP' SPEAK ('VI' TASKNAME,'VI' MESSAGE); ; MOV R4,-(SP) ;SAVE REGISTER R4 ON STACK MOV #TSK,R4 ;HOLD TASK NAME STORE AREA ADDRESS CALL R$R50L+2 ;INITIALISE RAD50 LOADER MOV 2(R5),R1 ;HOLD ADDRESS OF TASK NAME STRING MOV (R1)+,R2 ;HOLD LENGTH OF STRING , POINT TO 1ST CHAR 10$: MOVB (R1)+,R0 ;HOLD A CHARACTER CALL R$R50L ;CONVERT AND LOAD R50 CHARACTER SOB R2,10$ ;LOOP TILL END OF STRING MOV 4(R5),R1 ;HOLD MESSAGE STRING ADDRESS MOV R1,R2 ;DITTO CMPB (R2)+,(R2)+ ;R2 POINTS TO 1ST CHARACTER GTSK$S #ESB ;READ TASK PARAMETERS SPWN$S #TSK,,,ESB+G.TSDU+1,ESB+G.TSDU,#29.,,#ESB,R2,@R1 ;USE EVENT FLAG 29 IFERROR 20$ ;J IF DIRECTIVE HAS FAILED WTSE$S #29. ;WAIT TO FINISH IFERROR 20$ MOV ESB,R0 ;HOLD EXIT STATUS BLOCK REPLY BR 30$ ;TIME TO GO HOME 20$: MOV $DSW,R0 ;SAVE DSW REPLY 30$: MOV (SP)+,R4 ;RESTORE REGISTER R4 RETURN ;BACK HOME TO MUMMY ; TSK: .BLKW 2 ;SPACE FOR 6 RAD50 LETTERS (NOT FRENCH) ESB: .BLKW 16. ;SPACE FOR EXIT STATUS BLOCK AND TASK PARAMS ; ; END OF PROGRAM ; .END