Consultor Eletrônico



Kbase P11820: 4GL: How to compile the source code of a given directory?
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   3/18/2003
Status: Unverified

GOAL:

4GL: How to compile the source code of a given directory?

FIX:

DEF STREAM DirStream. /*IMPORT FROM OS-DIR*/
DEF STREAM LogStream. /*compile log file*/

DEF TEMP-TABLE OSFile /*record = source code to compile*/
FIELD Name AS CHAR /*File-Name*/
FIELD FullName AS CHAR /*Path + File-Name*/.

DEF VAR OSFileAttribute AS CHAR /*Attribut*/.

RUN CompileDirectory ("<DirToCompile>","<DirToSaveInto>").


PROCEDURE CompileDirectory:
DEF INPUT PARAM DirToCompile AS CHAR.
DEF INPUT PARAM DirToSaveInto AS CHAR.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

RUN LoadDir( DirToCompile).

OUTPUT STREAM LogStream TO Z:\ProgressStuffs\comp.lg APPEND.
PUT STREAM LogStream UNFORM "~n~n~n~n " TODAY
" Compilation session started at " STRING(TIME,"hh:mm:ss") "~n".

FOR EACH OSFile:
/* if any wrx file then copy it*/
OS-COPY VALUE( ENTRY(1,OSFile.FullName,".") + ".wrx")
VALUE( DirToSaveInto).

PUT STREAM LogStream UNFORM STRING(TIME,"hh:mm:ss")
" compiling " OSFile.FullName "~n".

COMPILE VALUE( OSFile.FullName) SAVE INTO VALUE( DirToSaveInto) NO-ERROR.

IF COMPILER:ERROR THEN DO:
PUT STREAM LogStream UNFORM "~n" STRING(TIME,"hh:mm:ss")
" Compilation ERROR in " OSFile.FullName " at line "
COMPILER:ERROR-ROW " column " COMPILER:ERROR-COL "~n".
DO i = ERROR-STATUS:NUM-MESSAGES TO 1 BY -1:
PUT STREAM LogStream UNFORM
" (" ERROR-STATUS:GET-NUMBER(i) ") "
ERROR-STATUS:GET-MESSAGE(i) "~n".
END.
PUT STREAM LogStream UNFORM "~n".
END.

IF COMPILER:WARNING THEN DO:
PUT STREAM LogStream UNFORM "~n" STRING(TIME,"hh:mm:ss")
" Compilation WARNING in " OSFile.FullName " at line "
COMPILER:ERROR-ROW " column " COMPILER:ERROR-COL "~n".
DO i = ERROR-STATUS:NUM-MESSAGES TO 1 BY -1:
PUT STREAM LogStream UNFORM
" (" ERROR-STATUS:GET-NUMBER(i) ") "
ERROR-STATUS:GET-MESSAGE(i) "~n".
END.
PUT STREAM LogStream UNFORM "~n".
END.
END.
OUTPUT STREAM LogStream CLOSE.
END PROCEDURE. /** CompileDirectory **/


PROCEDURE LoadDir:
DEF INPUT PARAM DirToLoad AS CHAR.

INPUT STREAM DirStream FROM OS-DIR (DirToLoad).
REPEAT:
CREATE OSFile.
IMPORT STREAM DirStream OSFile.Name OSFile.FullName OSFileAttribute.
IF LOOKUP(OSFile.Name,".,..") <> 0
OR INDEX(OSFileAttribute,"F") = 0
OR LOOKUP( SUBSTR(OSFile.NAME, LENGTH(OSFile.NAME) - 1,2), ".p,.w") = 0
THEN DELETE OSFile.
END.
DELETE OSFile. /*delete last blank record*/
INPUT STREAM DirStream CLOSE.
END PROCEDURE. /** LoadDir **/