
/*------------------------------------------------------------------------
    File        : GeneratePreprocOutput4GL.p
    Purpose     : 

    Syntax      :

    Description : 

    Author(s)   : 
    Created     : Fri Mar 28 12:59:15 EET 2025
    Notes       :
  ----------------------------------------------------------------------*/

/* ***************************  Definitions  ************************** */

BLOCK-LEVEL ON ERROR UNDO, THROW.

/* ********************  Preprocessor Definitions  ******************** */


/* ***************************  Main Block  *************************** */
DEFINE INPUT    PARAMETER   basepath        AS CHAR NO-UNDO.
DEFINE INPUT    PARAMETER   outpath         AS CHAR NO-UNDO.
DEFINE INPUT    PARAMETER   postfix         AS CHAR NO-UNDO.
DEFINE          VAR         inputFile       AS CHAR.
DEFINE          VAR         outputFile      AS CHAR.
DEFINE          VAR         fileName        AS CHAR FORMAT "x(64)".
DEFINE          VARIABLE    stat            AS INTEGER   NO-UNDO.

IF outpath <> basepath THEN DO:
    OS-CREATE-DIR VALUE(outpath).
    stat = OS-ERROR.
    IF stat NE 0 THEN
        MESSAGE "Directory not created. System Error #" stat.
END.
FILE-INFO:FILE-NAME = basepath.
IF FILE-INFO:FILE-TYPE = ? THEN DO:
    /* Path not found */
    MESSAGE "Not found".
END.
ELSE IF FILE-INFO:FILE-TYPE BEGINS 'D' THEN DO:
    /* This is a directory */
    INPUT FROM OS-DIR(basepath).
    REPEAT:
        SET fileName.
        FILE-INFO:FILE-NAME = basepath + fileName.
        RUN compile-file.
    END.
    INPUT CLOSE.
END.
ELSE IF FILE-INFO:FILE-TYPE BEGINS 'F' THEN DO:
    /* This is a filename */
    RUN compile-file.
END.
ELSE DO:
    MESSAGE "Not supported".
END.

PROCEDURE compile-file:
    DEFINE VARIABLE filename AS CHAR.
    filename = FILE-INFO:FILE-NAME.
    DEF VAR numEntries AS INTEGER NO-UNDO.
    numEntries = NUM-ENTRIES(filename, "/").
    
    IF numEntries GT 0 THEN DO:
        filename = ENTRY(numEntries, filename, "/").
    END.
    
    IF  filename MATCHES "*.p"      OR
        filename MATCHES "*.w"      OR
        filename MATCHES "*.cls"    THEN 
    DO:
        inputFile   = FILE-INFO:FULL-PATHNAME.
        outputFile  = outpath + "/" + filename + "." + postfix.
        MESSAGE outputFile.
        COMPILE VALUE(inputFile) SAVE PREPROCESS VALUE(outputFile) NO-ERROR.
    END.
END.
