ADAS Subroutine xxhkey
SUBROUTINE XXHKEY( CTEXT , CKEY , CBREAK , CANS )
C-----------------------------------------------------------------------
C
C ****************** FORTRAN77 SUBROUTINE: XXHKEY *********************
C
C PURPOSE: TO EXTRACT FROM A LINE OF TEXT 'CTEXT' A RESPONSE TO A KEY
C IN THER FORM OF '<CKEY> = <CANS>'.
C
C CALLING PROGRAM: GENERAL USE
C
C SUBROUTINE:
C
C INPUT : (C*(*)) CTEXT = INPUT TEXT LINE CONTAINING KEY & RESPONSES
C INPUT : (C*(*)) CKEY = KEY TEXT
C INPUT : (C*1 ) CBREAK = KEY/RESPONSE PAIR SEPERATOR SYMBOL
C
C OUTPUT: (C*(*)) CANS = RERSPONSE FOR GIVEN KEY: BLANK IF NOT FOUND
C
C (I*4) LENTXT = LENGTH IN BYTES OF 'CTEXT' STRING
C (I*4) LENKEY = LENGTH IN BYTES OF 'CKEY' STRING
C (I*4) LENANS = LENGTH IN BYTES OF 'CANS' STRING
C (I*4) IKEY = LENGTH IN BYTES OF 'CKEY' IGNORING TRAILING
C BLANKS
C (I*4) IPOS1 = USED IN IDENTIFYING RELEVANT BYTES IN CTEXT
C (I*4) IPOS2 = USED IN IDENTIFYING RELEVANT BYTES IN CTEXT
C (I*4) IPOS3 = USED IN IDENTIFYING RELEVANT BYTES IN CTEXT
C (I*4) I = GENERAL USE INDEX
C
C ROUTINES: NONE
C
C NOTES: THIS ROUTINE EXTRACTS FROM 'CTEXT' A RESPONSE TO A GIVEN KEY
C IN THER FORM OF '<CKEY> = <CANS>'. E.G. 'FILE = DSN001'
C WOULD REQUIRE AS INPUT CKEY='FILE' AND WOULD GIVE AS OUTPUT
C CANS='DSN001'. ALL KEY/RESPONSE PAIRS MUST BE SEPARATED BY
C THE CHARACTER GIVEN BY 'CBREAK' E.G. A SLASH, AND EACH KEY
C MUST BE FOLLOWED BY AN EQUALS SIGN. THE NUMBER OF SPACES
C BETWEEN THE KEY AND THE EQUAL SIGN AND BETWEEN THE RESPONSE
C AND THE EQUAL SIGN IS NOT IMPORTANT.
C
C THE BYTE PRECEEDING THE KEY MUST BE A BLANK OR 'CBREAK'
C CHARACTER UNLESS IT STARTS AT BYTE ONE IN 'CTEXT'.
C
C IF A KEY DOES NOT EXIST IN 'CTEXT' THEN 'CANS' IS RETURNED
C BLANK.
C
C THE KEY IS TAKEN AS 'CKEY' REMOVING ANY TRAILING BLANKS.
C LEADING BLANKS ARE LEFT IN PLACE AND WILL USED WHEN THE
C THE SEARCH FOR THE KEY IS MADE:
C
C I.E. 'DATA ' AND 'DATA' ARE THE SAME KEY BUT
C ' DATA ' AND 'DATA ' ARE DIFFERENT KEYS ALTHOUGH
C BOTH WILL GIVE THE SAME RESULTS IF A SPACE EXISTS
C BEFORE 'DATA' IN THE INPUT TEXT LINE.
C
C AN EXAMPLE OF AN INPUT TEXT LINE IS:
C
C 8524.0 A 5 7 /FILMEM = FBBH91BE/ CODE= V2B DLN1 /
C
C THIS WOULD GIVE THE FOLLOWING:
C
C CKEY='FILMEM' => CANS='FBBH91BE'
C CKEY=' FILMEM' => CANS=' '
C CKEY='CODE' => CANS='V2B DLN1'
C CKEY=' CODE' => CANS='V2B DLN1'
C CKEY='OTHER' => CANS=' '
C
C (IF THE CHARACTER STRING IS SHORTER THAN THE RESPONSE THEN
C THE RESPONSE IS TRUNCATED ACCORDINGLY.)
C
C SPACES CAN EXIST IN THE KEY. I.E. CKEY='PLOT A'. BUT CARE
C SHOULD BE TAKEN WHEN USING PREFIXES ON A COMMON KEY BASE,
C I.E. 'A PLOT', 'B PLOT'. THIS IS BECAUSE IF A SUBSEQUENT
C KEY TO BE FOUND IS 'PLOT' THEN EITHER OF THESE SATISFY
C THIS CRITERION AS WELL AS 'PLOT' ITSELF.
C
C AN EXAMPLE OF AN INPUT TEXT LINE IS:
C
C A FILE=TEST0/B FILE = TEST1/FILE=TEST2/FILE 1=TEST3/FILE 2=/
C
C THIS WOULD GIVE THE FOLLOWING:
C
C CKEY='A FILE' => CANS='TEST0'
C CKEY='B FILE' => CANS='TEST1'
C CKEY='FILE' => CANS='TEST0' (WRONG RESPONSE PICKED UP)
C CKEY='FILE 1' => CANS='TEST3'
C CKEY='FILE 2' => CANS='TEST4'
C
C IT IS ALSO POSSIBLE TO IMBED RESPONSES
C
C AN EXAMPLE OF AN INPUT TEXT LINE IS:
C
C FILE 1 = Z1 = 23 / FILE = FILE 1 = 6 /
C
C THIS WOULD GIVE THE FOLLOWING:
C
C CKEY='FILE 1' => CANS='Z1 = 23'
C CKEY=' FILE 1' => CANS='6'
C CKEY='Z1' => CANS='23'
C CKEY='FILE' => CANS='FILE 1 = 6'
C
C AUTHOR: PAUL E. BRIDEN (TESSELLA SUPPORT SERVICES PLC)
C K1/0/37
C JET EXT. 2520
C
C DATE: 26/04/91
C
C VERSION : 1.2
C DATE : 31-05-2007
C MODIFIED : H P Summers
C - Increased robustness for single letter keys occurring
C elsewhere at non-key positions in strings.
C
C-----------------------------------------------------------------------
CHARACTER*(*) CANS
CHARACTER CBREAK
CHARACTER*(*) CKEY, CTEXT