SUBROUTINE DISPLA(LINE, NL, WORD, PRMPT, LINRED, TOTLIN 1,NWORDS, ALISTL, CLISTL, WLISTL, DEBUG, VERSN, TERSE 2,VT52, VT100, NUMBER, PLINE, LOWEST, VOWEL) C+ C SUBROUTINE DISPLA WILL DISPLAY ON THE SCREEN IN THE NON-QUICK MODE C THE WORD THAT IS NOT FOUND IN THE DICTIONARY OR ANY OF THE C LISTS AS WELL AS THE LINE FROM THE DOCUMENT IN WHICH THE C WORD WAS FOUND. IN THE VERBOSE MODE (NON-TERSE) THE TITLE, C REVISION NUMBER, COMMAND LIST, AND STATISTICS ARE PRINTED ALSO. C FOR SCREEN ADDRESSING THE SUBROUTINE USES THE VT100 TYPE ESCAPE C SEQUENCES. RETURN WILL REDRAW THE SCREEN WITH ERASE. C C ADJUSTMENTS CAN BE MADE TO USE THE VT52 TYPE ESCAPE SEQUENCES BY C USING THE /V SWITCH. C C VT100 ESCAPE SEQUENCES ARE: C GO TO UPPER LEFT IS: '[0;0H' C CLEAR TO END OF SCREEN: '[2J' C C VT52 ESCAPE SEQUENCES ARE: C GO TO UPPER LEFT IS 'H' C CLEAR TO END OF SCREEN IS 'J' C C REMEMBER IS '33'O C C LOCAL VARIABLES C FIRST - IS THIS THE FIRST TIME THRU THIS ROUTINE? C GOTWRD - WAS WORD RETURNED FROM CALL TO DICTIONARY? C ICMND - COMAND STARTS ON EVEN BOUNDRY C IWWORD - WWORD STARTS ON EVEN BOUNDRY C NC - NUMBER OF CHARACTERS IN COMMAND READ C COMAND - HOLDER FOR COMMAND READ C WWORD - HOLDER FOR INCORRECT WORD ON CALL TO DICTIONARY C C SUBROUTINES REFERENCED C CRCTLN - CORRECT LINE WITH INCORRECT WORD INIT C EXIT - FORTRAN EXIT ROUTINE C GETDCT - REFERENCE THE DICTIONARY PROGRAM C LOWER - CONVERT UPPER CASE TO LOWER CASE LETTERS IN ARRAY C C- BYTE PRMPT, LINE(NL), WORD(25), COMAND(5), WWORD(25), ESC LOGICAL*1 DEBUG, TERSE, FIRST, VT52, VT100, NUMBER LOGICAL*1 GOTWRD, VOWEL INTEGER*4 NWORDS, TOTLIN, LINRED INTEGER*2 ALISTL, CLISTL, WLISTL, LOWEST, PLINE INTEGER*2 ICMND, IWWORD EQUIVALENCE (ICMND,COMAND(1)) EQUIVALENCE (IWWORD,WWORD(1)) DATA FIRST/.TRUE./ ESC/'33'O/ C PLINE=0 10 IF(.NOT.TERSE)THEN IF(.NOT.DEBUG)THEN IF(FIRST)THEN IF(VT52)WRITE(3,1000)ESC,ESC IF(VT100)WRITE(3,1050)ESC,ESC FIRST=.FALSE. ELSE IF(VT52)WRITE(3,1040)ESC IF(VT100)WRITE(3,1060)ESC END IF END IF WRITE(3,1100)VERSN !WRITE HEADING WRITE(3,1110)LINRED,TOTLIN,NWORDS,ALISTL,CLISTL,WLISTL IF(VT52)WRITE(3,1070)ESC IF(VT100)WRITE(3,1080)ESC END IF WRITE(3,1010)(LINE(I),I=1,NL) !WRT LINE WRD IS IN WRITE(3,1020)WORD,'10'O !WRITE NOT FOUND WRD READ(3,1030,END=30)NC,(COMAND(I),I=1,NC) !GET COMMAND IF(NC.EQ.0)THEN FIRST=.TRUE. !DEFINE TO REDRAW GO TO 10 END IF CALL LOWER(COMAND, NC) IF(COMAND(1).EQ.'+')THEN !SKIP LINES IF(NC.GT.1)THEN DECODE(NC-1,1090,COMAND(2))PLINE ELSE PLINE=1 END IF RETURN END IF IF(COMAND(1).EQ.'q')THEN LOWEST=250 !WORDS AS LONG AS AS A LINE PRMPT='n' !FAKE A NEXT COMMAND RETURN END IF IF(COMAND(1).EQ.'r')THEN VOWEL=.TRUE. GO TO 10 END IF IF(COMAND(1).EQ.'-')THEN IF(COMAND(2).EQ.'t')TERSE=.FALSE. IF(COMAND(2).EQ.'r')VOWEL=.FALSE. END IF IF(COMAND(1).EQ.'d'.AND.COMAND(2).EQ.'e' 1.AND.COMAND(3).EQ.'b'.AND.COMAND(4).EQ.'u' 2.AND.COMAND(5).EQ.'g')THEN !TOGGLE DEBUG SWITCH DEBUG=.NOT.DEBUG GO TO 10 END IF PRMPT=COMAND(1) IF(PRMPT.EQ.'t')THEN TERSE=.TRUE. GO TO 10 END IF IF(PRMPT.EQ.'d')THEN !LOOK UP WORD IN DICT DO 20,I=1,25 20 WWORD(I)=WORD(I) CALL GETDCT(WORD,GOTWRD,VT52,VT100,TERSE,NUMBER) IF(GOTWRD)CALL CRCTLN(LINE,NL,WWORD,WORD,1,DEBUG) GO TO 10 END IF RETURN 30 IF(VT52)WRITE(3,1000)ESC,ESC !CNTRL Z CAUSES EXIT IF(VT100)WRITE(3,1050)ESC,ESC CALL EXIT 1000 FORMAT(1X,A1,'H',A1,'J') 1010 FORMAT(1X,132A1) 1020 FORMAT('$',25A1,1X,'>>',' ',A1) 1030 FORMAT(Q,5A1) 1040 FORMAT(1X,A1,'H') 1050 FORMAT(1X,A1,'[0;0H',A1,'[0J') 1060 FORMAT(1X,A1,'[0;0H') 1070 FORMAT(1X,A1,'J') 1080 FORMAT(1X,A1,'[0J') 1090 FORMAT(I) 1100 FORMAT(26X,'SPELLING CHECKER V',F3.1,' COMMANDS' 1,/ 2,/,1X,' Redraw screen' 5, T42,'N Next word, do not add to list' 4,/,1x,'# Ignore words <= to # in length' 7, T42,'Q Quit (continue to end)' 6,/,1X,'+n Skip n lines' 7, T42,'R Word requires vowel to be consid' 6,/,1X,'A Correct, add to dictionary' 9, T42,'-R Consonant words will be considered' 8,/,1x,'C Correct, do not add to dictionary' 7, T42,'T Change to terse screen display' 1,/,1x,'D Look up word in dictionary' 9, T42,'-T Change to verbose screen display' 3,/,1X,'E Exchange word, do not add to list' 2, T42,'W Wrong spelling, make correction' 3,/,1X,'L Replace current line' 4, T42,'X Exit, as if end of document',/) 1110 FORMAT(1X,'Number of lines processed = ',I5,' out of ',I5 1,/,1X,'Number of words processed = ',I6 2,/,1X,'Maximum words allowed in list = 100' 3,/,1X,'Number of words to be added to dictionary = ',I3 4,/,1X,'Number of words in correct list = ',I3 5,/,1x,'Number of words in incorrect list = ',I3) END