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 **/