/*REXX*/
/*---- GETSPFC ------------------------------- 2019 - Mark McDonald ----
   Routine to read SPFPC (3-4), SPFPRO, SPFSE (1-8) and SPF365 CLR
   files to obatain a lanuage keyword list.
----------------------------------------------------------------------*/
/*--- Determine OS Slashes ---*/
      PARSE SOURCE TOS ZED ; IF TOS == "WindowsNT" THEN TOS = "WNT"
      TOS = TRANSLATE(LEFT(TOS,3))
      TPIN = FIXS("\U\E\SPFPRO\PROFILES\COBOL.CLR")
/*--- Load SPF Profile ---*/
      CALL GETPROFILE
/*--- Display Keyword Array ---*/
      DO WC = 1 TO KW.0.0
         DO CNT = 1 TO KW.WC.0
            SAY 'KW.'WC'.'CNT' = 'KW.WC.CNT
         END; SAY 'KW.'WC'.0 = 'KW.WC.0'  <<<'
      END; SAY "SPF PARMS: "; DO ICNT = 1 TO SPFI.0; SAY SPFI.ICNT; END
      PULL Z
EXIT
/*--------------------------------------------------------------------*/
/*--- Load SPFPC4/5 SE/1-8/365 Profiles ------------------------------*/
GETPROFILE:                                      ;/*SAY 'SPFPC CALLED'*/
  WC = 0; I. = ''; ICNT = 0; SPFI.0 = 0
  DO WHILE LINES(TPIN) <> 0
     TR = LINEIN(TPIN); TR1 = WORD(TR,1)
     /*--- SPF Color Profile Instructions ---*/
     IF TR1 == "CASE"                     | ,
        TR1 == "COLOR_CASE_SENSE"         | ,
        TR1 == "STRING_DELIMITERS"        | ,
        TR1 == "COLOR_DELIMTERS"          | ,
        TR1 == "COLOR_BLANK_IS_DELIMITER" | ,
        TR1 == "BLOCK_COMMENT"            | ,
        TR1 == "COLOR_BEGEND"             | ,
        TR1 == "LINE_COMMENT"             | ,
        TR1 == "COLOR_TO_END"             | ,
        TR1 == "COLOR_COL_TO__END"        | ,
        TR1 == "SPECIAL_CHARS"            | ,
        TR1 == "NO_BREAK_CHAR"            THEN DO
        ICNT = ICNT + 1; SPFI.ICNT = TR; SPFI.0 = ICNT
     END
     /*--- SPFSE 1-8 Color Profile Keywords ---*/
     IF WORD(TR,1) == "COLOR_WORD_SET" THEN DO
        WC = WC + 1;  KW.0.0 = WC; KW.WC.0 = 0
        DO CNT = 1 TO 2000
           TR = LINEIN(TPIN)
           IF WORDS(TR) > 0 THEN DO
              P = ''; PARSE VALUE TR WITH . P ; KW.WC.CNT = P ; END
           ELSE LEAVE CNT
           KW.WC.0 = CNT         ;/* SAY 'KW.'WC'.'CNT' = 'KW.WC.CNT */
        END                      ;/* SAY 'KW.'WC'.0 = 'KW.WC.0'  <<<'*/
     END
     /*--- SPCPC 4/5 Color Profile Keywords ---*/
     IF LEFT(WORD(TR,1),7) == "WORD_CO" THEN DO
        WC = WC + 1 ; KW.0.0 = WC; KW.WC.0 = 0
        DO CNT = 1 TO 2000
           TR = LINEIN(TPIN)
           IF WORDS(TR) > 0 THEN DO
              P = '';PARSE VALUE TR WITH . '"'P'"' . ; KW.WC.CNT = P ; END
           ELSE LEAVE CNT
           KW.WC.0 = CNT         ;/* SAY 'KW.'WC'.'CNT' = 'KW.WC.CNT */
        END                      ;/* SAY 'KW.'WC'.0 = 'KW.WC.0'  <<<'*/
     END
  END; /*SAY "SPF PARMS: "; DO ICNT = 1 TO SPFI.0; SAY SPFI.ICNT; END*/
RETURN
/*--- Fix path slahes for AND root -----------------------------------*/
FIXS: PROCEDURE EXPOSE TOS
  PARSE ARG FSPEC
  SELECT
    WHEN POS(TOS, "UNI LIN") > 0 THEN FSPEC = "/mnt/home"||TRANSLATE(FSPEC,"/","\")
    WHEN POS(TOS, "DOS MSD PCD") > 0 THEN FSPEC = "C:"||TRANSLATE(FSPEC,"\","/")
    WHEN POS(TOS, "WIN WNT") > 0 THEN FSPEC = "Z:\MNT\HOME"||TRANSLATE(FSPEC,"\","/")
    OTHERWISE NOP
  END
RETURN FSPEC