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