Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-05 - decus/20-0141/dalead.for
There are 2 other files named dalead.for in the archive. Click here to see a list.
      SUBROUTINE DALEAD(INITYP,NXTTYP,ITRAIL,KWRDLO,KWRDHI,
     1    KWORD ,KCNTLO,KCNTHI,KCOUNT,NUMTYP,LWRDLO,LWRDHI,
     2    LWORD ,LCNTLO,LCNTHI,LCOUNT,IBUFFR,MAXBFR,LOWBFR,
     3    KIND  ,KOMAND,KWRDID,KCNTID,LOCAL ,LWRDID,LCNTID,
     4    INITAL,IVALUE,VALUE ,IFLOAT)
C     RENBR(/RETURN COMMAND AND NUMERIC OR WORD ARGUMENT)
C
C     DONALD BARTH, HARVARD BUSINESS SCHOOL
C
C     ROUTINE TO IDENTIFY A COMMAND WORD  AND  A  FOLLOWING
C     ASSOCIATED WORD, ASSOCIATED NUMBER OR ASSOCIATED TEXT
C     STRING WHICH IS MARKED AT BOTH ENDS BY APOSTROPHES.
C
C     THE FOLLOWING ARGUMENTS ARE USED FOR INPUT ONLY,  AND
C     ARE RETURNED UNCHANGED.
C
C     INITYP = IF REPRESENTATION OF NUMBER IS FOUND OUTSIDE
C              RANGE  OF  COMMAND,  THEN  INITYP  SPECIFIES
C              WHETHER VALUE IS TO BE RETURNED  AS  INTEGER
C              ARGUMENT  IVALUE  OR AS REAL ARGUMENT VALUE.
C              NUMBER  CAN  BE  TYPED  WITH  DECIMAL  POINT
C              AND/OR   EXPONENT  REGARDLESS  OF  VALUE  OF
C              INITYP.
C            = -2, IF REPRESENTATION  OF  NUMBER  IS  FOUND
C              OUTSIDE RANGE OF COMMAND, THEN IT IS TREATED
C              AS UNKNOWN SEQUENCE OF CHARACTERS, AND  KIND
C              IS RETURNED CONTAINING VALUE 7.
C            = -1, VALUE IS CALCULATED AS OCTAL INTEGER AND
C              RETURNED   AS   ARGUMENT  IVALUE.   HOWEVER,
C              NUMBER FOLLOWING LETTER  E  OF  EXPONENT  IS
C              EVALUATED IN DECIMAL.
C            = 0, VALUE IS CALCULATED  AS  DECIMAL  INTEGER
C              AND IS RETURNED AS ARGUMENT IVALUE.
C            = 1 OR GREATER,  VALUE  IS  RETURNED  AS  REAL
C              ARGUMENT  VALUE.   IF  POSSIBLE, REAL NUMBER
C              WILL BE  ACCUMULATED  AS  INTEGER,  THEN  BE
C              CONVERTED  TO REAL AND SHIFTED AS NECESSARY.
C              INITYP  IS  MAXIMUM  NUMBER  OF  DIGITS   IN
C              INTEGER.
C     NXTTYP = IF REPRESENTATION OF NUMBER IS FOUND  WITHIN
C              RANGE  OF  COMMAND,  THEN  NXTTYP  SPECIFIES
C              WHETHER VALUE IS TO BE RETURNED  AS  INTEGER
C              ARGUMENT  IVALUE  OR AS REAL ARGUMENT VALUE.
C              NUMBER  CAN  BE  TYPED  WITH  DECIMAL  POINT
C              AND/OR   EXPONENT  REGARDLESS  OF  VALUE  OF
C              NXTTYP.
C            = -3, WHETHER NUMBER IS INTERPRETED  AS  OCTAL
C              INTEGER  OR AS DECIMAL INTEGER OR AS DECIMAL
C              REAL,  AND  WHETHER  VALUE  IS  RETURNED  IN
C              ARGUMENT  IVALUE  OR  VALUE  IS SPECIFIED BY
C              NUMTYP ARRAY ENTRY HAVING SAME SUBSCRIPT  AS
C              KCOUNT  ARRAY  ENTRY  CONTAINING  NUMBER  OF
C              CHARACTERS IN COMMAND.  CALLING PROGRAM MUST
C              NOT  CHANGE  VALUE  OF  KCNTID  RETURNED  BY
C              PREVIOUS CALL TO THIS ROUTINE IF  NXTTYP  IS
C              SET TO -3.
C            = -2, IF REPRESENTATION  OF  NUMBER  IS  FOUND
C              WITHIN  RANGE OF COMMAND, THEN IT IS TREATED
C              AS UNKNOWN SEQUENCE OF CHARACTERS, AND  KIND
C              IS   RETURNED   CONTAINING  VALUE  7  OR  14
C              DEPENDING  UPON  WHETHER  COMMAND  WORD  WAS
C              FOUND BY CURRENT CALL TO THIS ROUTINE.
C            = -1, VALUE IS CALCULATED AS OCTAL INTEGER AND
C              RETURNED   AS   ARGUMENT  IVALUE.   HOWEVER,
C              NUMBER FOLLOWING LETTER  E  OF  EXPONENT  IS
C              EVALUATED IN DECIMAL.
C            = 0, VALUE IS CALCULATED  AS  DECIMAL  INTEGER
C              AND IS RETURNED AS ARGUMENT IVALUE.
C            = 1 OR GREATER,  VALUE  IS  RETURNED  AS  REAL
C              ARGUMENT  VALUE.   IF  POSSIBLE, REAL NUMBER
C              WILL BE  ACCUMULATED  AS  INTEGER,  THEN  BE
C              CONVERTED  TO REAL AND SHIFTED AS NECESSARY.
C              NXTTYP  IS  MAXIMUM  NUMBER  OF  DIGITS   IN
C              INTEGER.
C     ITRAIL = SELECTS  WHETHER   EXPONENTS   ARE   TO   BE
C              RECOGNIZED.   IF  NOT, THEN EACH NUMBER WILL
C              TERMINATE PRIOR TO EXPONENT, AND LOWBFR WILL
C              BE  RETURNED  POINTING  TO  LETTER  STARTING
C              EXPONENT.
C            = -1, EXPONENTS EXPRESSED IN E NOTATION ARE TO
C              BE  RECOGNIZED, BUT PERCENT SIGN AND LETTERS
C              K AND M ARE TO BE TREATED SAME AS ANY  OTHER
C              ALPHABETIC CHARACTERS.
C            = 0,  NO  EXPONENTS  ARE   TO  BE  RECOGNIZED.
C              NUMBERS  WILL BE TERMINATED PRIOR TO PERCENT
C              SIGNS OR TO LETTERS E OR K OR M.
C            = 1, PERCENT  SIGNS,  LETTERS  K  AND  M,  AND
C              EXPONENTS EXPRESSED IN E NOTATION ARE ALL TO
C              BE RECOGNIZED.
C     KWRDLO = SUBSCRIPT  OF  LOCATION   IN   KWORD   ARRAY
C              CONTAINING  FIRST CHARACTER OF FIRST COMMAND
C              WORD WHICH CAN BE RECOGNIZED.
C     KWRDHI = SUBSCRIPT  OF  LOCATION   IN   KWORD   ARRAY
C              CONTAINING  FINAL CHARACTER OF FINAL COMMAND
C              WORD WHICH CAN BE RECOGNIZED.
C     KWORD  = ARRAY CONTAINING CHARACTERS OF COMMAND WORDS
C              WHICH  CAN  BE  RECOGNIZED,  1 CHARACTER PER
C              ARRAY LOCATION AS THOUGH READ BY MULTIPLE OF
C              A1 FORMAT OR DEFINED BY SEVERAL 1H FIELDS.
C     KCNTLO = SUBSCRIPT  OF  LOCATION  IN   KCOUNT   ARRAY
C              CONTAINING  NUMBER  OF  CHARACTERS  IN FIRST
C              COMMAND WORD WHICH CAN  BE  RECOGNIZED.   IF
C              KCNTLO  IS  GREATER  THAN  KCNTHI,  THEN  NO
C              COMMAND WORDS  CAN  BE  RECOGNIZED,  CAUSING
C              KIND  TO  ALWAYS BE RETURNED CONTAINING 7 OR
C              LESS.
C     KCNTHI = SUBSCRIPT  OF  LOCATION  IN   KCOUNT   ARRAY
C              CONTAINING  NUMBER  OF  CHARACTERS  IN FINAL
C              COMMAND WORD WHICH CAN BE RECOGNIZED.
C     KCOUNT = ARRAY CONTAINING IN LOCATIONS KCOUNT(KCNTLO)
C              THROUGH AND INCLUDING KCOUNT(KCNTHI) NUMBERS
C              OF CHARACTERS IN  EACH  OF  SEVERAL  COMMAND
C              WORDS  WHICH  CAN  BE  RECOGNIZED.  NEGATIVE
C              ENTRY  IN  KCOUNT  ARRAY  CAUSES  NUMBER  OF
C              CHARACTERS  INDICATED  BY  ABSOLUTE VALUE OF
C              NEGATIVE NUMBER TO BE SKIPPED OVER IN  KWORD
C              ARRAY WITHOUT FORMING RECOGNIZABLE WORD.
C     NUMTYP = SPECIFIES  MANNER   IN   WHICH   NUMBER   IS
C              EVALUATED  IF  NUMBER  IS  WITHIN  RANGE  OF
C              COMMAND AND IF NXTTYP=-3.  WHETHER NUMBER IS
C              INTERPRETED  AS  OCTAL INTEGER OR AS DECIMAL
C              INTEGER OR  AS  DECIMAL  REAL,  AND  WHETHER
C              VALUE  IS  RETURNED  IN  ARGUMENT  IVALUE OR
C              VALUE IS SPECIFIED  BY  NUMTYP  ARRAY  ENTRY
C              HAVING  SAME SUBSCRIPT AS KCOUNT ARRAY ENTRY
C              CONTAINING NUMBER OF CHARACTERS IN  COMMAND.
C              IF  NXTTYP  IS  GREATER THAN -3, THEN NUMTYP
C              ARRAY  IS  IGNORED.   VALUES  OF  INDIVIDUAL
C              ENTRIES  WITHIN  NUMTYP  ARRAY  ARE  DEFINED
C              SIMILARLY   TO   THOSE   OF   NONDIMENSIONED
C              ARGUMENT  NXTTYP  (OTHER THAN NXTTYP=-3) AND
C              ARE AS FOLLOW
C            = -2, IF REPRESENTATION  OF  NUMBER  IS  FOUND
C              WITHIN  RANGE OF COMMAND, THEN IT IS TREATED
C              AS UNKNOWN SEQUENCE OF CHARACTERS, AND  KIND
C              IS   RETURNED   CONTAINING  VALUE  7  OR  14
C              DEPENDING  UPON  WHETHER  COMMAND  WORD  WAS
C              FOUND BY CURRENT CALL TO THIS ROUTINE.
C            = -1, VALUE IS CALCULATED AS OCTAL INTEGER AND
C              RETURNED   AS   ARGUMENT  IVALUE.   HOWEVER,
C              NUMBER FOLLOWING LETTER  E  OF  EXPONENT  IS
C              EVALUATED IN DECIMAL.
C            = 0, VALUE IS CALCULATED  AS  DECIMAL  INTEGER
C              AND IS RETURNED AS ARGUMENT IVALUE.
C            = 1 OR GREATER,  VALUE  IS  RETURNED  AS  REAL
C              ARGUMENT  VALUE.   IF  POSSIBLE, REAL NUMBER
C              WILL BE  ACCUMULATED  AS  INTEGER,  THEN  BE
C              CONVERTED  TO REAL AND SHIFTED AS NECESSARY.
C              NUMTYP(KCNTID) IS MAXIMUM NUMBER  OF  DIGITS
C              IN INTEGER.
C     LWRDLO = SUBSCRIPT  OF  LOCATION   IN   LWORD   ARRAY
C              CONTAINING    FIRST   CHARACTER   OF   FIRST
C              ASSOCIATED WORD WHICH CAN BE RECOGNIZED.
C     LWRDHI = SUBSCRIPT  OF  LOCATION   IN   LWORD   ARRAY
C              CONTAINING    FINAL   CHARACTER   OF   FINAL
C              ASSOCIATED WORD WHICH CAN BE RECOGNIZED.
C     LWORD  = ARRAY CONTAINING  CHARACTERS  OF  ASSOCIATED
C              WORDS  WHICH  CAN BE RECOGNIZED, 1 CHARACTER
C              PER  ARRAY  LOCATION  AS  THOUGH   READ   BY
C              MULTIPLE  OF A1 FORMAT OR DEFINED BY SEVERAL
C              1H FIELDS.
C     LCNTLO = SUBSCRIPT  OF  LOCATION  IN   LCOUNT   ARRAY
C              CONTAINING  NUMBER  OF  CHARACTERS  IN FIRST
C              ASSOCIATED WORD WHICH CAN BE RECOGNIZED.  IF
C              LCNTLO  IS  GREATER  THAN  LCNTHI,  THEN  NO
C              ASSOCIATED WORDS CAN BE RECOGNIZED  SO  THAT
C              KIND  CANNOT  BE  RETURNED  WITH  EITHER  OF
C              VALUES 4 OR 11.
C     LCNTHI = SUBSCRIPT  OF  LOCATION  IN   LCOUNT   ARRAY
C              CONTAINING  NUMBER  OF  CHARACTERS  IN FINAL
C              ASSOCIATED WORD WHICH CAN BE RECOGNIZED.
C     LCOUNT = ARRAY CONTAINING IN LOCATIONS LCOUNT(LCNTLO)
C              THROUGH AND INCLUDING LCOUNT(LCNTHI) NUMBERS
C              OF CHARACTERS IN EACH OF SEVERAL  ASSOCIATED
C              WORDS  WHICH  CAN  BE  RECOGNIZED.  NEGATIVE
C              ENTRY  IN  LCOUNT  ARRAY  CAUSES  NUMBER  OF
C              CHARACTERS  INDICATED  BY  ABSOLUTE VALUE OF
C              NEGATIVE NUMBER TO BE SKIPPED OVER IN  LWORD
C              ARRAY WITHOUT FORMING RECOGNIZABLE WORD.
C     IBUFFR = INPUT BUFFER  ARRAY,  CONTAINING  CHARACTERS
C              TYPED  BY  USER  AND  READ BY MULTIPLE OF A1
C              FORMAT, WHICH IS TO BE  SEARCHED  FOR  KNOWN
C              COMMAND   WORDS,   KNOWN  ASSOCIATED  WORDS,
C              NUMBERS AND  QUOTED  TEXT  STRINGS.   IBUFFR
C              THEN   CONTAINS  1  CHARACTER  PER  COMPUTER
C              STORAGE LOCATION.
C     MAXBFR = SUBSCRIPT OF FINAL (RIGHTMOST)  LOCATION  IN
C              IBUFFR ARRAY WHICH CAN BE SEARCHED FOR KNOWN
C              WORDS, NUMBERS AND QUOTED TEXT STRINGS.
C
C     THE  FOLLOWING  ARGUMENTS  MUST  BE  SET  BY  CALLING
C     PROGRAM BEFORE THIS ROUTINE IS FIRST CALLED, THEN ARE
C     RETURNED BY THIS ROUTINE CONTAINING INFORMATION TO BE
C     USED  BY  CALLING  PROGRAM AND, USUALLY, TO BE PASSED
C     UNCHANGED TO SUBSEQUENT CALL TO THIS ROUTINE.
C
C     LOWBFR = SHOULD BE INPUT CONTAINING SUBSCRIPT  WITHIN
C              IBUFFR  ARRAY  OF FIRST (LEFTMOST) CHARACTER
C              WHICH CAN BE SCANNED  FOR  KNOWN  WORDS  AND
C              NUMBERS  AND QUOTED TEXT STRINGS.  LOWBFR IS
C              RETURNED  CONTAINING  SUBSCRIPT  OF   IBUFFR
C              ARRAY   LOCATION   TO   RIGHT  OF  RIGHTMOST
C              CHARACTER OF RIGHTMOST IDENTIFIED ITEM.
C     KIND   = INPUT CONTAINING 0, THIS ROUTINE HAS NOT YET
C              BEEN  CALLED  DURING  EXECUTION  OF  CURRENT
C              LOGICAL SECTION OF  CALLING  PROGRAM.   THIS
C              ROUTINE  IS  TO BEGIN EVALUATION OF CONTENTS
C              OF INPUT TEXT BUFFER, NOT CONTINUE RANGE  OF
C              COMMAND  WORD IDENTIFIED BY PREVIOUS CALL TO
C              THIS ROUTINE.  THE FOLLOWING VALUES OF  KIND
C              ARE  RETURNED  TO CALLING PROGRAM DESCRIBING
C              TYPE OF ITEM  OR  ITEMS  LOCATED  IN  IBUFFR
C              ARRAY.   EXCEPT WHERE MENTIONED BELOW, THESE
C              VALUES  ARE  USUALLY  PASSED  UNCHANGED   TO
C              SUBSEQUENT CALL TO THIS ROUTINE.
C            = 1, EITHER INPUT BUFFER WAS  EMPTY,  OR  ELSE
C              NEXT  PRINTING  CHARACTER  AT OR TO RIGHT OF
C              IBUFFR(LOWBFR),   IGNORING    COMMAS,    WAS
C              EXCLAMATION   POINT.    LOWBFR  IS  RETURNED
C              POINTING  BEYOND  END  OF  BUFFER.   IT   IS
C              EXPECTED  THAT CALLING PROGRAM WILL READ NEW
C              TEXT INTO INPUT BUFFER AND RESET  LOWBFR  TO
C              POINT  TO  FIRST  CHARACTER IN BUFFER BEFORE
C              AGAIN CALLING THIS ROUTINE.  UNLESS KIND  IS
C              CHANGED  TO 3 BY CALLING PROGRAM, SUBSEQUENT
C              CALL TO  THIS  ROUTINE  WILL  RETURN  KOMAND
C              ZEROED   IF   NEW   COMMAND   WORD   IS  NOT
C              IDENTIFIED.
C            = 2, NEXT PRINTING CHARACTER AT OR TO RIGHT OF
C              IBUFFR(LOWBFR),    IGNORING    COMMAS,   WAS
C              SEMICOLON.  LOWBFR IS RETURNED  POINTING  TO
C              CHARACTER   TO   RIGHT  OF  SEMICOLON.   THE
C              SUBSEQUENT CALL TO THIS ROUTINE WILL  RETURN
C              KOMAND  ZEROED  IF  NEW  COMMAND WORD IS NOT
C              IDENTIFIED.
C            = 3, NEXT PRINTING CHARACTER AT OR TO RIGHT OF
C              IBUFFR(LOWBFR),    IGNORING    COMMAS,   WAS
C              AMPERSAND.  LOWBFR  IS  RETURNED  CONTAINING
C              MAXBFR+1.    IT  IS  EXPECTED  THAT  CALLING
C              PROGRAM WILL READ NEW TEXT INTO INPUT BUFFER
C              AND RESET LOWBFR TO POINT TO FIRST CHARACTER
C              IN BUFFER BEFORE AGAIN CALLING THIS ROUTINE.
C              UNLESS  KIND  IS  CHANGED  TO  1  BY CALLING
C              PROGRAM, SUBSEQUENT  CALL  TO  THIS  ROUTINE
C              WILL  RETURN  VALUES  OF  KOMAND, KWRDID AND
C              KCNTID UNCHANGED IF NEW COMMAND WORD IS  NOT
C              IDENTIFIED.
C            = 4, NEXT PRINTING CHARACTERS AT OR  TO  RIGHT
C              OF  IBUFFR(LOWBFR),  IGNORING  COMMAS EXCEPT
C              FOR THEIR USE AS WORD  SEPARATORS,  UNIQUELY
C              IDENTIFIED  ASSOCIATED  WORD  IN  DICTIONARY
C              CONTAINED  IN  LWORD  AND   LCOUNT   ARRAYS.
C              INITAL  IS  RETURNED CONTAINING SUBSCRIPT OF
C              IBUFFR ARRAY LOCATION WHICH  CONTAINS  FIRST
C              CHARACTER OF ASSOCIATED WORD OR ABBREVIATION
C              OF  ASSOCIATED  WORD.   LOWBFR  IS  RETURNED
C              POINTING  TO  CHARACTER  TO RIGHT OF WORD OR
C              WORD ABBREVIATION.  THE SUBSEQUENT  CALL  TO
C              THIS  ROUTINE  WILL RETURN VALUES OF KOMAND,
C              KWRDID AND KCNTID UNCHANGED IF  NEW  COMMAND
C              WORD IS NOT IDENTIFIED.
C            = 5, NEXT PRINTING CHARACTERS AT OR  TO  RIGHT
C              OF  IBUFFR(LOWBFR),  IGNORING  COMMAS EXCEPT
C              FOR THEIR USE AS NUMBER  SEPARATORS,  FORMED
C              NUMBER.   THE VALUE OF NUMBER IS RETURNED IN
C              ARGUMENT IVALUE IF RETURNED AS INTEGER OR IN
C              ARGUMENT  VALUE IF RETURNED  AS REAL NUMBER.
C              INITAL IS RETURNED  CONTAINING SUBSCRIPT  OF
C              IBUFFR ARRAY  LOCATION WHICH  CONTAINS FIRST
C              CHARACTER  OF  NUMBER.   LOWBFR  IS RETURNED
C              POINTING TO CHARACTER TO  RIGHT  OF  NUMBER.
C              THE  SUBSEQUENT  CALL  TO  THIS ROUTINE WILL
C              RETURN VALUES OF KOMAND, KWRDID  AND  KCNTID
C              UNCHANGED   IF   NEW  COMMAND  WORD  IS  NOT
C              IDENTIFIED.
C            = 6, NEXT PRINTING CHARACTER AT OR TO RIGHT OF
C              IBUFFR(LOWBFR), IGNORING LEADING COMMAS, WAS
C              APOSTROPHE WHICH IS POINTED TO  BY  RETURNED
C              VALUE   OF   INITAL.    LOWBFR  IS  RETURNED
C              POINTING TO CHARACTER TO RIGHT OF  RIGHTMOST
C              CHARACTER  WITHIN  QUOTED  TEXT  STRING.  IF
C              QUOTED TEXT  STRING  IS  NOT  TERMINATED  BY
C              UNPAIRED APOSTROPHE, THEN LOWBFR IS RETURNED
C              POINTING TO CHARACTER TO RIGHT OF  RIGHTMOST
C              PRINTING  CHARACTER  IN  BUFFER.   IF QUOTED
C              TEXT  STRING  IS  TERMINATED   BY   UNPAIRED
C              APOSTROPHE,  THEN THIS APOSTROPHE IS CHANGED
C              TO SPACE POINTED TO  BY  RETURNED  VALUE  OF
C              LOWBFR.   IF PAIR OF ADJACENT APOSTROPHES IS
C              FOUND  WITHIN  QUOTED  TEXT   STRING,   THEN
C              PORTION  OF  QUOTED  TEXT STRING TO RIGHT OF
C              PAIR  OF  APOSTROPHES  IS  MOVED   TO   LEFT
C              OVERWRITING  SECOND  APOSTROPHE OF PAIR, AND
C              LOWBFR IS RETURNED POINTING TO CHARACTER  TO
C              RIGHT  OF RIGHTMOST CHARACTER OF QUOTED TEXT
C              STRING IN ITS NEW  LOCATION.   THE  LOCATION
C              VACATED  BY  RIGHTMOST  CHARACTER  IS FILLED
C              WITH SPACE AFTER SHIFT IS COMPLETE.
C            = 7, NEXT PRINTING CHARACTERS AT OR  TO  RIGHT
C              OF  IBUFFR(LOWBFR),  IGNORING  COMMAS EXCEPT
C              FOR  THEIR   USE   AS   CHARACTER   SEQUENCE
C              SEPARATORS,  FORMED  UNKNOWN SEQUENCE.  THIS
C              VALUE OF KIND IS RETURNED ALSO  IF  WORD  OR
C              WORD  ABBREVIATION IS NOT UNIQUE ACROSS BOTH
C              DICTIONARIES, OR  IF  COMMAND  WORD  OR  ITS
C              ABBREVIATION   OR  ASSOCIATED  WORD  OR  ITS
C              ABBREVIATION IS FOLLOWED  BY  ANY  CHARACTER
C              OTHER  THAN  SPACE,  TAB, COMMA, APOSTROPHE,
C              SEMICOLON, EXCLAMATION POINT  OR  AMPERSAND.
C              INITAL  IS  RETURNED CONTAINING SUBSCRIPT OF
C              IBUFFR ARRAY LOCATION WHICH  CONTAINS  FIRST
C              CHARACTER  OF UNKNOWN SEQUENCE OR OF WORD OR
C              ABBREVIATION WHICH IS  FOLLOWED  BY  UNKNOWN
C              SEQUENCE.   LOWBFR  IS  RETURNED POINTING TO
C              FOLLOWING  SPACE,  TAB,  COMMA,  APOSTROPHE,
C              SEMICOLON, EXCLAMATION POINT OR AMPERSAND OR
C              BEYOND  END  OF  LINE  IF  UNKNOWN  PRINTING
C              CHARACTERS  EXTEND THROUGH END OF LINE.  THE
C              SUBSEQUENT CALL TO THIS ROUTINE WILL  RETURN
C              VALUES   OF   KOMAND,   KWRDID   AND  KCNTID
C              UNCHANGED  IF  NEW  COMMAND  WORD   IS   NOT
C              IDENTIFIED.
C            = 8 THROUGH 14, SAME AS KIND VALUES 1  THROUGH
C              7  RESPECTIVELY  EXCEPT THAT COMMAND WORD OR
C              ABBREVATION WAS RECOGNIZED PRIOR TO  END  OF
C              LINE  (8),  SEMICOLON  (9),  AMPERSAND (10),
C              ASSOCIATED WORD (11),  NUMBER  (12),  QUOTED
C              TEXT STRING (13) OR UNKNOWN SEQUENCE (14).
C            = 8, COMMAND WORD EXTENDED  THROUGH  RIGHTMOST
C              PRINTING  CHARACTERS  IN  LINE, OR ELSE NEXT
C              PRINTING CHARACTER TO RIGHT OF COMMAND WORD,
C              IGNORING COMMAS EXCEPT FOR THEIR USE AS WORD
C              SEPARATORS, WAS EXCLAMATION  POINT.   UNLESS
C              KIND  IS  CHANGED  TO 10 BY CALLING PROGRAM,
C              SUBSEQUENT CALL TO THIS ROUTINE WILL  RETURN
C              KOMAND ZEROED UNLESS NEW COMMAND IS FOUND.
C            = 10, NEXT  PRINTING  CHARACTER  TO  RIGHT  OF
C              COMMAND  WORD,  IGNORING  COMMAS  EXCEPT FOR
C              THEIR USE AS WORD SEPARATORS, WAS AMPERSAND.
C              THE  CALLING  PROGRAM  SHOULD  READ NEW TEXT
C              INTO INPUT BUFFER  AND  SUBSEQUENT  CALL  TO
C              THIS    ROUTINE    IS   THEN   TO   CONTINUE
C              INTERPRETATION OF NEW TEXT  AS  THOUGH  THIS
C              COMMAND   WORD  APPEARED  AT  START  OF  NEW
C              CONTENTS OF BUFFER.  UNLESS KIND IS  CHANGED
C              TO  8 BY CALLING PROGRAM, SUBSEQUENT CALL TO
C              THIS ROUTINE WILL RETURN KOMAND, KWRDID  AND
C              KCNTID   UNCHANGED   AND  WILL  RETURN  KIND
C              GREATER THAN 7.
C            = 15, IGNORING COMMAS EXCEPT FOR THEIR USE  AS
C              WORD   TERMINATORS,   COMMAND  WORD  OR  ITS
C              ABBREVIATION WAS FOLLOWED BY  SPACES  AND/OR
C              TABS   AND/OR  COMMAS  AND  THEN  BY  SECOND
C              COMMAND WORD OR ITS ABBREVIATION.  THE FIRST
C              COMMAND  IS IDENTIFIED BY RETURNED VALUES OF
C              KOMAND,  KWRDID  AND  KCNTID.    LOWBFR   IS
C              RETURNED  POINTING  TO  FIRST  CHARACTER  OF
C              SECOND COMMAND WORD WHICH WILL  IN  TURN  BE
C              IDENTIFIED   BY   SUBSEQUENT  CALL  TO  THIS
C              ROUTINE.  IF KIND WAS INPUT CONTAINING VALUE
C              10,  THEN  SECOND  COMMAND WORD IS OF COURSE
C              ACTUALLY FIRST TO APPEAR IN CURRENT CONTENTS
C              OF BUFFER.
C
C     THE  FOLLOWING  ARGUMENTS  ARE  RETURNED  TO  CALLING
C     PROGRAM   IDENTIFYING  COMMAND  WORD  FOUND  BY  THIS
C     ROUTINE OR WHICH IS STILL  IN  EFFECT  FROM  PREVIOUS
C     CALL TO THIS ROUTINE.
C
C     KOMAND = RETURNED  CONTAINING  SEQUENCE   NUMBER   OF
C              CURRENT  COMMAND  WORD  AMONG  ALL  POSSIBLE
C              COMMAND WORDS.  THE SEQUENCE NUMBER DOES NOT
C              INCLUDE  LETTERS  SKIPPED  OVER  BY VALUE OF
C              KWRDLO BEING GREATER THAN 1,  AND  DOES  NOT
C              INCLUDE  LETTERS  SKIPPED  OVER  BY NEGATIVE
C              VALUES ENCOUNTERED IN KCOUNT ARRAY.   KOMAND
C              IS  NUMBER  OF  VALUES IN KCOUNT ARRAY WHICH
C              ARE   GREATER   THAN   ZERO   STARTING    AT
C              KCOUNT(KCNTLO)  UP  TO  AND INCLUDING KCOUNT
C              ARRAY  LOCATION  WHICH  CONTAINS  NUMBER  OF
C              LETTERS    IN    COMMAND   WORD   WHICH   IS
C              SUCCESSFULLY MATCHED.   KOMAND  IS  RETURNED
C              CONTAINING  ZERO IF KIND IS INPUT CONTAINING
C              0, 1, 2, 8 OR 9  INDICATING  THAT  RANGE  OF
C              PREVIOUS COMMAND IS BEING TERMINATED, AND IF
C              KIND IS RETURNED LESS THAN  OR  EQUAL  TO  7
C              INDICATING  THAT  NO  NEW COMMAND WAS FOUND.
C              KOMAND IS  RETURNED  UNCHANGED  IF  KIND  IS
C              INPUT CONTAINING VALUE OTHER THAN 0, 1, 2, 8
C              OR 9, AND IF KIND IS RETURNED LESS  THAN  OR
C              EQUAL TO 7.
C     KWRDID = RETURNED CONTAINING SUBSCRIPT OF KWORD ARRAY
C              LOCATION  WHICH  CONTAINS FIRST CHARACTER OF
C              MATCHED COMMAND WORD.   KWRDID  IS  RETURNED
C              UNCHANGED  IF COMMAND IDENTIFIED BY PREVIOUS
C              CALL TO THIS ROUTINE IS STILL IN EFFECT.
C     KCNTID = RETURNED  CONTAINING  SUBSCRIPT  OF   KCOUNT
C              ARRAY  LOCATION  WHICH  CONTAINS  NUMBER  OF
C              CHARACTERS IN MATCHED COMMAND WORD.   KCNTID
C              IS  RETURNED UNCHANGED IF COMMAND IDENTIFIED
C              BY PREVIOUS CALL TO THIS ROUTINE IS STILL IN
C              EFFECT.
C
C     THE  FOLLOWING  ARGUMENTS  ARE  RETURNED  TO  CALLING
C     PROGRAM  IDENTIFYING ASSOCIATED WORD FOUND IF KIND IS
C     RETURNED CONTAINING EITHER 4 OR 11.  THESE  ARGUMENTS
C     ARE  RETURNED  UNCHANGED IF KIND IS RETURNED WITH ANY
C     VALUE OTHER THAN 4 OR 11.
C
C     LOCAL  = RETURNED  CONTAINING  SEQUENCE   NUMBER   OF
C              ASSOCIATED    WORD    AMONG   ALL   POSSIBLE
C              ASSOCIATED WORDS.  THE SEQUENCE NUMBER  DOES
C              NOT INCLUDE LETTERS SKIPPED OVER BY VALUE OF
C              LWRDLO BEING GREATER THAN 1,  AND  DOES  NOT
C              INCLUDE  LETTERS  SKIPPED  OVER  BY NEGATIVE
C              VALUES ENCOUNTERED IN LCOUNT  ARRAY.   LOCAL
C              IS  NUMBER  OF  VALUES IN LCOUNT ARRAY WHICH
C              ARE   GREATER   THAN   ZERO   STARTING    AT
C              LCOUNT(LCNTLO)  UP  TO  AND INCLUDING LCOUNT
C              ARRAY  LOCATION  WHICH  CONTAINS  NUMBER  OF
C              LETTERS   IN   ASSOCIATED   WORD   WHICH  IS
C              SUCCESSFULLY MATCHED.
C     LWRDID = RETURNED CONTAINING SUBSCRIPT OF LWORD ARRAY
C              LOCATION  WHICH  CONTAINS FIRST CHARACTER OF
C              MATCHED ASSOCIATED WORD.
C     LCNTID = RETURNED  CONTAINING  SUBSCRIPT  OF   LCOUNT
C              ARRAY  LOCATION  WHICH  CONTAINS  NUMBER  OF
C              CHARACTERS IN MATCHED ASSOCIATED WORD.
C
C     THE FOLLOWING ARGUMENTS ARE  USED  ONLY  FOR  OUTPUT.
C     THEIR INPUT VALUES ARE IGNORED.
C
C     INITAL = RETURNED  CONTAINING  SUBSCRIPT  OF   IBUFFR
C              ARRAY    LOCATION   WHICH   CONTAINS   FIRST
C              CHARACTER OF ASSOCIATED WORD (KIND  RETURNED
C              AS  4  OR 11), OF NUMBER (KIND RETURNED AS 5
C              OR 12), OR OF UNKNOWN SEQUENCE OF CHARACTERS
C              (KIND  RETURNED AS 7 OR 14).  IF QUOTED TEXT
C              STRING IS FOUND (KIND RETURNED CONTAINING  6
C              OR  13), THEN INITAL IS RETURNED POINTING TO
C              APOSTROPHE AT LEFT END OF STRING.
C     IVALUE = RETURNED CONTAINING VALUE IF NUMBER IS FOUND
C              (KIND BEING RETURNED CONTAINING 5 OR 12) AND
C              IF NUMBER IS  EVALUATED AS  OCTAL INTEGER OR
C              AS DECIMAL INTEGER.
C     VALUE  = RETURNED CONTAINING VALUE IF NUMBER IS FOUND
C              (KIND BEING RETURNED CONTAINING 5 OR 12) AND
C              IF NUMBER IS EVALUATED AS DECIMAL REAL.
C     IFLOAT = SPECIFIES HOW NUMBER WAS EVALUATED.   IFLOAT
C              IS RETURNED SET EQUAL TO INITYP IF NUMBER IS
C              OUTSIDE RANGE OF COMMAND, OR  SET  EQUAL  TO
C              NXTTYP  IF NUMBER IS WITHIN RANGE OF COMMAND
C              AND NXTTYP HAS VALUE GREATER THAN -3, OR SET
C              EQUAL  TO  ENTRY IN NUMTYP ARRAY HAVING SAME
C              SUBSCRIPT  AS  KCOUNT  ARRAY   ENTRY   WHICH
C              SPECIFIES NUMBER OF CHARACTERS IN COMMAND IF
C              NXTTYP=-3.  IFLOAT  IS  RETURNED  UNDEFINED,
C              BUT  PROBABLY  CHANGED,  IF KIND IS RETURNED
C              WITH VALUE OTHER THAN 5 OR 12.
C            = -1, NUMBER WAS EVALUATED  AS  OCTAL  INTEGER
C              AND ITS VALUE IS RETURNED IN IVALUE.
C            = 0, NUMBER WAS EVALUATED AS  DECIMAL  INTEGER
C              AND ITS VALUE IS RETURNED IN IVALUE.
C            = 1  OR  GREATER,  NUMBER  WAS  EVALUATED   AS
C              DECIMAL  REAL  AND  ITS VALUE IS RETURNED IN
C              ARGUMENT NAMED VALUE.
C
      DIMENSION KWORD(KWRDHI),KCOUNT(KCNTHI),
     1NUMTYP(KCNTHI),LWORD(LWRDHI),LCOUNT(LCNTHI),
     2IBUFFR(MAXBFR)
      DATA KOMENT,IEND,IAND,KOMMA,IQUOTE,IBLANK,ITAB/
     11H!,1H;,1H&,1H,,1H',1H ,1H	/
C
C     SET INITIAL CONSTANTS
      IF(KIND.EQ.10)GO TO 15
      IF(KIND.LE.2)GO TO 1
      IF(KIND.EQ.8)GO TO 1
      IF(KIND.NE.9)GO TO 2
    1 KOMAND=0
    2 KIND=1
      GO TO 4
C
C     LOOK FOR NEXT NONBLANK CHARACTERS
    3 LOWBFR=LOWBFR+1
    4 IF(LOWBFR.GT.MAXBFR)GO TO 26
      LETTER=IBUFFR(LOWBFR)
      IF(LETTER.EQ.IBLANK)GO TO 3
      IF(LETTER.EQ.ITAB)GO TO 3
      IF(LETTER.EQ.KOMMA)GO TO 3
      IF(LETTER.EQ.IEND)GO TO 25
      IF(LETTER.EQ.IAND)GO TO 23
      IF(LETTER.EQ.KOMENT)GO TO 24
      INITAL=LOWBFR
      IF(LETTER.EQ.IQUOTE)GO TO 18
      LEGAL=0
C
C     TEST IF PRINTING CHARACTERS FORM A COMMAND WORD
      CALL DAVERB(KWRDLO,KWRDHI,KWORD,KCNTLO,KCNTHI,
     1KCOUNT,IBUFFR,MAXBFR,LOWBFR,ITYPE,IMATCH,IWRDID,
     2ICNTID,LCNBFR)
C
C     TEST IF PRINTING CHARACTERS FORM AN ARGUMENT WORD
      JPOINT=INITAL
      CALL DAVERB(LWRDLO,LWRDHI,LWORD,LCNTLO,LCNTHI,
     1LCOUNT,IBUFFR,MAXBFR,JPOINT,JTYPE,JMATCH,JWRDID,
     2JCNTID,LCNBFR)
C
C     IF WORD MATCHES FROM BOTH DICTIONARIES, DECIDE ACTION
      IF(LOWBFR.LT.JPOINT)GO TO 6
      IF(LOWBFR.GT.JPOINT)GO TO 5
      IF(ITYPE.LE.2)GO TO 8
      IF(ITYPE.EQ.JTYPE)GO TO 12
      IF(JTYPE.EQ.3)GO TO 7
      IF(ITYPE.NE.3)GO TO 12
    5 IF(ITYPE.NE.5)LEGAL=-1
      GO TO 12
    6 LOWBFR=JPOINT
    7 IF(JTYPE.NE.5)LEGAL=1
      GO TO 12
C
C     CHECK FOR NUMBER
    8 IF(KOMAND.LE.0)GO TO 10
      IF(NXTTYP.GE.-2)GO TO 9
      IFLOAT=NUMTYP(KCNTID)
      GO TO 11
    9 IFLOAT=NXTTYP
      GO TO 11
   10 IFLOAT=INITYP
   11 CALL DAHEFT(IFLOAT,ITRAIL,0,IBUFFR,MAXBFR,
     1LOWBFR,ITYPE,ISHIFT,JSHIFT,KSHIFT,LSHIFT,IVALUE,
     2VALUE)
      IF(ITYPE.LE.2)GO TO 12
      KIND=KIND+4
      GO TO 26
C
C     CHECK FOLLOWING CHARACTERS
   12 IF(LOWBFR.GT.MAXBFR)GO TO 13
      LETTER=IBUFFR(LOWBFR)
      IF(LETTER.EQ.IBLANK)GO TO 13
      IF(LETTER.EQ.ITAB)GO TO 13
      IF(LETTER.EQ.KOMMA)GO TO 13
      IF(LETTER.EQ.IEND)GO TO 13
      IF(LETTER.EQ.IAND)GO TO 13
      IF(LETTER.EQ.KOMENT)GO TO 13
      IF(LETTER.EQ.IQUOTE)GO TO 13
      LOWBFR=LOWBFR+1
      LEGAL=0
      GO TO 12
   13 IF(LEGAL.LT.0)GO TO 14
      IF(LEGAL.GT.0)GO TO 17
      KIND=KIND+6
      GO TO 26
   14 IF(KIND.NE.1)GO TO 16
      KOMAND=IMATCH
      KCNTID=ICNTID
      KWRDID=IWRDID
   15 KIND=8
      GO TO 4
   16 KIND=15
      LOWBFR=INITAL
      GO TO 26
   17 LOCAL=JMATCH
      LCNTID=JCNTID
      LWRDID=JWRDID
      KIND=KIND+3
      GO TO 26
C
C     APOSTROPHE FOUND
   18 KIND=KIND+5
      I=LOWBFR
      J=LOWBFR
   19 IF(I.GE.MAXBFR)GO TO 20
      I=I+1
      J=J+1
      IBUFFR(J)=IBUFFR(I)
      IF(IBUFFR(I).EQ.IBLANK)GO TO 19
      IF(IBUFFR(I).EQ.ITAB)GO TO 19
      LOWBFR=J
      IF(IBUFFR(I).NE.IQUOTE)GO TO 19
      IF(I.GE.MAXBFR)GO TO 22
      IF(IBUFFR(I+1).NE.IQUOTE)GO TO 22
      I=I+1
      GO TO 19
   20 LOWBFR=LOWBFR+1
   21 IF(J.GE.I)GO TO 26
      J=J+1
   22 IBUFFR(J)=IBLANK
      GO TO 21
C
C     AMPERSAND FOUND
   23 KIND=KIND+2
   24 LOWBFR=MAXBFR+1
      GO TO 26
C
C     SEMICOLON FOUND
   25 KIND=KIND+1
      LOWBFR=LOWBFR+1
C
C     RETURN TO CALLING PROGRAM
   26 RETURN
C842625025196!;&'
      END