SUBROUTINE GETDCT(WORD,GOTWRD,VT52,VT100,TERSE,NUMBER) C+ C SUBROUTINE GETDCT WILL DO A SEND TO ...DCT TASK OF THE INCORRECT C WORD. DCTNRY WILL DO VARIOUS TESTS AND LOOK UPS TO THE RAF C TO SEE IF IT CAN FIND A PROBABLE WORD. IF ANY ARE FOUND THE C USER IS PROMPTED TO SELECT ONE OR NOT. IF ONE IS SELECTED, IT IS C SEND BACK TO THE ...SPE TASK. THE USER IS INFORMED IF DCTNRY C IS NOT INSTALLED. C C LOCAL VARIABLES C IDS - DIRECTIVE STATUS RETURN TO EXEC ROUTINES C IEACT - REQUESTED TASK IS NOT ACTIVE C IEINS - REQUESTED TASK IS NOT INSTALLED C IEITS - NO PACKETS WAITING FOR RECEIVE C ISSUC - SUCCESSFUL RETURN FROM EXEC ROUTINE C NOTINS - DICTIONARY IS NOT INSTALLED C STATUS - SPELL STATUS BYTE TO GO TO DICTIONARY C TASK - HOLDER FOR DICTIONARY TASK NAME C BUF13 - FIRST 13 WORDS OF SEND BUFFER C BUF15 - THE RECEIVE BUFFER C INTWRD - WORD SENT OVER TO DICTIONARY AND GOT BACK C C SUBROUTINES REFERENCED C EXIT - FORTRAN EXIT ROUTINE C MARK - WAIT A SPECIFIED AMOUNT OF TIME C RECEIV - GET A SEND PACKET C REQUES - ACTIVATE A GIVEN TASK C SEND - SEND A PACKET TO ANOTHER TASK C STOP - STOP EXECUTION FOR A WHILE C STOPFR - STOP EXECUTION UNTIL EVENT FLAG SET C USTP - UNSTOP A GIVEN TASK THAT HAS STOPPED C C- BYTE WORD(26), INTWRD(26), STATUS LOGICAL*1 GOTWRD, NOTINS, VT52, VT100, TERSE, NUMBER INTEGER*2 BUF15(15), BUF13(13) EQUIVALENCE (BUF15(3),BUF13(1)) EQUIVALENCE (BUF13(1),INTWRD(1)) EQUIVALENCE (INTWRD(26),STATUS) DATA TASK/6R...DCT/ NOTINS/.FALSE./ C C ERROR CODES C DATA IEINS/-2/ ISSUC/+1/ IEITS/-8/ IEACT/-7/ C GOTWRD=.FALSE. !INITIALLY NOT FOUND IF(NOTINS)RETURN !IF NO DCTNRY 10 CALL RECEIV(,BUF15,,IDS) !GET RID OF ANY WAITING PACKETS IF(IDS.NE.IEITS)GO TO 10 !UNTIL THERE ISN'T ANY DO 20,I=1,25 !GET WORD FROM MAIN 20 INTWRD(I)=WORD(I) STATUS = 0 !INITIALIZE STATUS IF(VT52)STATUS=STATUS + 1 !INFORM DCTNRY OF THE APPRO IF(VT100)STATUS=STATUS + 2 !...STATUS WE CURRENTLY IF(TERSE)STATUS=STATUS + 16 !...HAVE, SO HE CAN IF(NUMBER)STATUS=STATUS + 32 !...USE THE INFO C C BITS IN STATUS AVAILABLE TO THE USER ARE: 4,8,64,128 C 4 & 8 WILL NORMALLY BE USED FOR TERMINAL TYPES C 64 & 128 ARE FOR FURTHER ENHANCEMENTS DCTNRY MIGHT NEED TO KNOW C BECAUSE OF THE STATUS BYTE WORDS ARE LIMITED TO 25 LETTERS C WHICH IS THE LENGTH USED IN THE MAIN PROGRAM. THE SEND C AND RECEIVE ARE LIMITED TO 26 BYTES UNLESS THE VARIABLE SEND C AND RECEIVE ARE USED OFF OF THE SIG TAPES. FORTUNATELY C IN THIS IMPLEMENTATION 25 BYTES ARE ALL THAT IS NEEDED. C CALL SEND(TASK, BUF13,, IDS) !TRY DCTNRY IF(IDS .EQ. IEINS )THEN !IF NOT INSTALLED ERROR IF(WORD(1) .EQ. '0'O)RETURN !JUST GET RID OF ...DCT NOTINS = .TRUE. !DCTNRY NOT INSTALLED WRITE(3,1000) !TELL USER CALL MARK(6,2,2) !SET EFN=6 AFTER 2 SEC CALL STOPFR(6) !WAIT FOR EFN=6 RETURN !GO BACK END IF 30 CALL USTP(TASK, IDS) !UNSTOP DCTNRY IF STOPPED IF(IDS .EQ. IEITS)GO TO 30 !WAIT TILL ITS STOPPED IF ACTIVE IF(IDS .EQ. IEACT)CALL REQUES(TASK,, IDS)!STARTUP IF NOT ACTIVE IF(WORD(1) .EQ. '0'O)RETURN !JUST GETTING RID OF ...DCT CALL STOP(IDS) !STOP CALL RECEIV(TASK, BUF15,, IDS) !GET PACKET IF(IDS .EQ. ISSUC)GOTWRD = .TRUE. !WE GOT PACKET DO 40,I=1,25 !SAME AS SENT OVER? IF(INTWRD(I) .NE. WORD(I))GO TO 50 40 CONTINUE GOTWRD = .FALSE. !YES, ERROR 50 CONTINUE IF(GOTWRD)THEN DO 60,I=1,25 60 WORD(I) = INTWRD(I) !COPY WORD BACK END IF IF(IDS .EQ. IEITS)CALL EXIT !NO PACKET TO GET RETURN 1000 FORMAT(' SPE - Dctnry not installed') END