interface test_tea # Test tea task parameter param type '_integer' range 1,10 vpath 'internal' default 2 endparameter action lapsang1 obey endobey endaction action lapsang2 obey endobey endaction action lapsang3 obey endobey endaction action lapsang4 obey endobey endaction action lapsang5 obey endobey endaction endinterface SUBROUTINE TEST_TEA (STATUS) * Test D-task that is run from a rescheduling control task IMPLICIT NONE INTEGER STATUS ! Modified STATUS INCLUDE 'SAE_PAR' INCLUDE 'ADAMDEFNS' INCLUDE 'ACT_ERR' INTEGER SEQ ! Action sequence number INTEGER CONTEXT ! Context (OBEY or CANCEL) INTEGER PARAM ! Arbitrary integer parameter INTEGER DELAY ! Delay between initial and final entries CHARACTER NAME*24 ! Action name CHARACTER VALUE*80 ! Value string SAVE PARAM ! Value must be saved IF (STATUS .NE. SAI__OK) RETURN * Pick up required "ACT parameters" CALL TASK_GET_NAME (NAME,STATUS) CALL TASK_GET_CONTEXT (CONTEXT,STATUS) CALL TASK_GET_SEQ (SEQ,STATUS) * Loop through possible OBEYs IF (NAME(1:7) .EQ. 'LAPSANG') THEN IF (SEQ .EQ. 0) THEN * Produce error - undefined parameter on LAPSANG2 IF (NAME(8:8) .EQ. '2') THEN CALL PAR_GET0I ('X',PARAM,STATUS) IF (STATUS .NE. SAI__OK) THEN CALL ERR_REP (' ', : 'TEA: LAPSANG1 Deliberate error - '// : 'No parameter X: ^STATUS', STATUS) * Flush the error messages and allow task to continue CALL ERR_FLUSH ( STATUS ) ENDIF * Get parameter value on LAPSANG3 * to be used as a count of TRIGGERS ELSE IF (NAME(8:8) .EQ. '3') THEN CALL PAR_GET0I ('PARAM',PARAM,STATUS) IF (STATUS .NE. SAI__OK) THEN CALL ERR_REP (' ', : 'TEA: LAPSANG3 Failed to get PARAM: ^STATUS', : STATUS) * Set harmless value for PARAM PARAM = -1 RETURN ENDIF ENDIF CALL MSG_SETC ('NAME',NAME) CALL MSG_OUT (' ','TEA: Starting ^NAME action',STATUS) DELAY = 1000 * (ICHAR(NAME(8:8)) - ICHAR('0')) CALL TASK_PUT_DELAY (DELAY,STATUS) CALL TASK_PUT_REQUEST ( ACT__WAIT, STATUS ) ELSE IF (NAME(8:8) .EQ. '4' .AND. SEQ .LE. PARAM) THEN VALUE = NAME(1:8)//' is paging you ...' CALL TASK_TRIGGER (NAME,VALUE,STATUS) IF (STATUS .NE. SAI__OK) THEN CALL ERR_REP (' ', : 'TEA: LAPSANG4 Failed to trigger control task: ^STATUS', : STATUS) ENDIF CALL TASK_PUT_DELAY (2000,STATUS) CALL TASK_PUT_REQUEST ( ACT__WAIT, STATUS ) ELSE CALL MSG_SETC ('NAME',NAME) CALL MSG_OUT (' ','TEA: Finishing ^NAME action',STATUS) CALL TASK_PUT_VALUE ('Lapsang''s ready!',STATUS) ENDIF ENDIF END
ADAM Guide to Writing Instrumentation Tasks