DEFINE INPUT    PARAMETER   basepath        AS CHARACTER NO-UNDO EXTENT.
DEFINE INPUT    PARAMETER   outpath         AS CHARACTER NO-UNDO.
DEFINE INPUT    PARAMETER   postfix         AS CHARACTER NO-UNDO.
DEFINE          VARIABLE    inputFile       AS CHARACTER NO-UNDO.
DEFINE          VARIABLE    outputFile      AS CHARACTER NO-UNDO.
DEFINE          VARIABLE    filename        AS CHARACTER FORMAT "x(64)".
DEFINE          VARIABLE    stat            AS INTEGER   NO-UNDO.
DEFINE          VARIABLE    idx             AS INTEGER   NO-UNDO.
DEFINE          VARIABLE    inputExtent     AS CHARACTER NO-UNDO EXTENT 1.

/* Create output directory */
OS-CREATE-DIR VALUE(outpath).
stat = OS-ERROR.
IF stat NE 0 THEN
    MESSAGE "Directory not created. System Error #" stat.
    

REPEAT idx = 1 TO EXTENT(basepath):
    FILE-INFO:FILE-NAME = basepath[idx].
    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 */
        basepath[idx] = basepath[idx] + "/".
        INPUT FROM OS-DIR(basepath[idx]).
        REPEAT:
            IMPORT filename.
            inputExtent[1] = basepath[idx] + filename.
            IF  filename MATCHES "*.p"      OR
                filename MATCHES "*.w"      OR
                filename MATCHES "*.cls"    THEN 
            DO:
                RUN tests/preproc/generate_preproc_output.p(inputExtent, outpath, postfix).
            END.
        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.
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.
    
    inputFile   = FILE-INFO:FULL-PATHNAME.
    outputFile  = outpath + "/" + filename + "." + postfix.
    COMPILE VALUE(inputFile) SAVE PREPROCESS VALUE(outputFile) NO-ERROR.
END.
