/************************************************************************/
/*                                                                      */
/* Filename            : COMPILE.P                                      */
/*                                                                      */
/* Author              : Van der Stee                                   */
/*                                                                      */
/* Generated by        :                                                */
/*                                                                      */
/* Date of creation    :                                                */
/*                                                                      */
/* Functionality       : Compileren van PROGRESS-procedures             */
/*                                                                      */
/* Parameters          :                                                */
/*                                                                      */
/* Globals             :                                                */
/*                                                                      */
/* Return              :                                                */
/*                                                                      */
/* Used library's      :                                                */
/*                                                                      */
/* Last Reviewed by    : Patrick Emmerechts                             */
/* Date of Last Review : 15/02/1999                                     */
/*                                                                      */
/* Last Reviewed by    : Jurgen Rousseau                                */
/* Date of Last Review : 04/04/2000                                     */
/*                                                                      */
/* Based on Change Req :                                                */
/*                                                                      */
/* Approved by         :                                                */
/*                                                                      */
/* Date of Approval    :                                                */
/*                                                                      */
/************************************************************************/
/*
<pvcs>
<workFile>$Workfile:   COMPILE.P  $</workFile>
<revision>$Revision: 1.3 $</revision>
<workFileTimeStamp>$Modtime:   Mar 17 2003 07:48:08  $</workFileTimeStamp>

<archive>$Archive:   C:/PVCS VM/v6.8.00/DIGIVOTE/Archives/VOTE/TOOLS/COMPILE.P-arc  $</archive>
<archiveTimeStamp>$Date: 2005/07/29 07:23:07 $</archiveTimeStamp>
<pvcsUser>$Author: jru $</pvcsUser>
</pvcs>
*/

/************************************************************************/
/*                                                                      */
/*        LOCAL CONSTANTS                                               */
/*                                                                      */
/************************************************************************/
DEF VAR RootDir              AS C FORMAT "X(50)"                  NO-UNDO.
DEF VAR ErrList              AS C FORMAT "X(50)"                  NO-UNDO.
DEF VAR ResetBat             AS C FORMAT "X(50)"                  NO-UNDO.
DEF VAR ConnectLsi           AS C FORMAT "X(50)"                  NO-UNDO.
DEF VAR FileList             AS C FORMAT "X(50)"                  NO-UNDO.
DEF VAR CallList             AS C FORMAT "X(50)"                  NO-UNDO.

/************************************************************************/
/*                                                                      */
/*        LOCAL VARIABLES                                               */
/*                                                                      */
/************************************************************************/
DEF VAR source               AS C   FORMAT "X(50)"                NO-UNDO.
DEF VAR grep                 AS C   FORMAT "X(50)" EXTENT 2       NO-UNDO.
DEF VAR tel                  AS I   FORMAT ">>>>9"                NO-UNDO.
DEF VAR tot                  AS I   FORMAT ">>>>9"                NO-UNDO.
DEF VAR proc                 AS DEC FORMAT ">>9.99"               NO-UNDO.
DEF VAR dest                 AS C   FORMAT "X(40)"                NO-UNDO.
DEF VAR lst                  AS C   FORMAT "X(40)"                NO-UNDO.
DEF VAR atitle               AS C   FORMAT "X(26)"                NO-UNDO.
DEF VAR i                    AS I                                 NO-UNDO.
DEF VAR pos                  AS I                                 NO-UNDO.
DEF VAR wz-l                 AS C                                 NO-UNDO.
DEF VAR wz-range             AS C   FORMAT "X(50)"  EXTENT 2      NO-UNDO.
DEF VAR wz-selrange          AS C   FORMAT "X(50)"                NO-UNDO.

/************************************************************************/
/*                                                                      */
/*        LOCAL WORKFILES                                               */
/*                                                                      */
/************************************************************************/
DEF WORKFILE wf FIELD w-prg AS C  /* Programme name with complete path         */
                FIELD w-db  AS C  /* Physical database name with complete path */
                FIELD w-ldb AS C. /* Logical database name                     */

/************************************************************************/
/*                                                                      */
/*        LOCAL FORMS                                                   */
/*                                                                      */
/************************************************************************/
FORM 
    wz-range AT 2 SPACE(1)
    WITH FRAME comprange
        TITLE " Compile Menu "
        NO-LABELS
        ROW 5
        CENTERED.

FORM
    "COMPILING          : " source                                  SKIP
    "SAVE INTO          : " dest                                    SKIP(1)
    "COMPILATION LIST   : " lst "(LISTING NOT USED FOR THE MOMENT)" SKIP(1)
    "CURRENTLY COMPILED : " tel "OF" tot "  (" proc "% )"           SKIP
    WITH FRAME afram
        TITLE atitle
        NO-LABELS
        ROW 11
        CENTERED.

/************************************************************************/
/*                                                                      */
/*        START PROCEDURE                                               */
/*                                                                      */
/************************************************************************/
ASSIGN
RootDir    = "C:\VOTE\"
ErrList    = "\PROGRESS.LST\_ERRLIST.TXT"
ResetBat   = "\VOTE\TEMP\RESET.BAT"      
ConnectLsi = "\VOTE\TOOLS\CONNECT.LSI"   
FileList   = "\VOTE\TEMP\FILE"           
CallList   = "\VOTE\TOOLS\LIST.BAT".      

OUTPUT TO VALUE(ErrList).
OUTPUT CLOSE.

IF NOT CONNECTED("elect")
THEN DO:
    OUTPUT TO VALUE(ResetBat).
    PUT UNFORMATTED
        "@Echo OFF"                                                 SKIP
        "Echo."                                                     SKIP
        "Echo   You must be connected to elect to compile properly" SKIP
        "Echo."                                                     SKIP.
    OUTPUT CLOSE.
    QUIT.
END.

/* Read from file the programs that need extra connected db. */
INPUT FROM VALUE(ConnectLSI) NO-ECHO.
REPEAT:
    CREATE wf.
    IMPORT wf.w-prg wf.w-db wf.w-ldb.
END.
INPUT CLOSE.

ASSIGN
wz-range[1] = "Only Changed PROGRESS Procedures Files !"
wz-range[2] = "All PROGRESS Procedures Files !".

KEUZE:
REPEAT ON ERROR  UNDO KEUZE, RETRY KEUZE
       ON ENDKEY UNDO KEUZE, LEAVE KEUZE
       WITH FRAME comprange:
    HIDE MESSAGE.
    DISPLAY wz-range.
    CHOOSE FIELD wz-range[1 FOR 2]
         GO-ON ("F4" "ESC")
         AUTO-RETURN.
    IF KEYFUNCTION(LASTKEY) = "END-ERROR" OR
       KEYLABEL(LASTKEY)    = "ESC"
    THEN DO:
        DOS SILENT VALUE("Del " + ErrList).
        DOS SILENT VALUE("Del " + ResetBat).
        QUIT.
    END.
    ELSE wz-selrange = FRAME-VALUE.
    LEAVE KEUZE.
END.

IF      wz-selrange = wz-range[1]
THEN DO:
    MESSAGE COLOR GRAY/BLACK "Searching for changed INCLUDE files ...".
    /* Search all changed .I and .G files and set all related .P to changed */
    DOS SILENT VALUE("Dir /AA /B /S " + RootDir + "*.I >  " + FileList).
    DOS SILENT VALUE("Dir /AA /B /S " + RootDir + "*.G >> " + FileList).

    tot = 0.
    INPUT FROM VALUE(FileList) NO-ECHO.
    OUTPUT TO VALUE(ResetBat).
    PUT UNFORMATTED "@Echo OFF" SKIP
                    "If Exist " FileList " Del " FileList SKIP.
    REPEAT:
        SET source.
        IF LENGTH(source) > 0
        THEN DO:
            tot = tot + 1.
            /* Reset Archive bit of .I or .G file */
            PUT UNFORMATTED "ATTRIB -A " source SKIP.
            pos = 0.
            REPEAT i = 1 TO LENGTH(source):
                IF SUBSTRING(source, i, 1) = "\"
                THEN pos = i.
            END.
            IF pos > 0
            THEN source = SUBSTRING(source, pos + 1, LENGTH(source) - pos).
            PUT UNFORMATTED "GREP -dil " source " *.P >> " FileList SKIP.
        END.
    END.
    OUTPUT CLOSE.
    INPUT CLOSE.
    IF tot > 0
    THEN DO:
        PAUSE 0 NO-MESSAGE.
        MESSAGE COLOR GRAY/BLACK "Searching for related PROGRAM files ...".
        DOS SILENT VALUE(ResetBat).
        INPUT FROM VALUE(FileList) NO-ECHO.
        OUTPUT TO VALUE(ResetBat).
        PUT UNFORMATTED "@Echo OFF" SKIP.
        REPEAT:
            SET grep.
            PUT UNFORMATTED "ATTRIB +A " SUBSTRING(grep[2],1,LENGTH(grep[2]) - 1) SKIP.
        END.
        OUTPUT CLOSE.
        INPUT CLOSE.
        DOS SILENT VALUE(ResetBat).
    END.
    PAUSE 0 NO-MESSAGE.
    atitle = " E-VOTING 2 - COMPILE CHANGED ".
    MESSAGE COLOR GRAY/BLACK "Assembling list with changed PROGRAM files ...".
    DOS SILENT VALUE("Dir /AA /B /S " + RootDir + "*.P > " + FileList).
END.
ELSE IF wz-selrange = wz-range[2]
THEN DO:
    atitle = " E-VOTING 2 - COMPILE ALL ".
    MESSAGE COLOR GRAY/BLACK "Assembling list with all PROGRAM files ...".
    DOS SILENT VALUE("Dir /B /S " + RootDir + "*.P > " + FileList).
END.
ELSE DO:
    MESSAGE "UNKNOWN MENU SELECTION !".
    PAUSE.
    QUIT.
END.

tot = 0.
INPUT FROM VALUE(FileList) NO-ECHO.
REPEAT:
    SET source .
    tot = tot + 1.
END.
INPUT CLOSE.
tel = 0.

INPUT FROM VALUE(FileList) NO-ECHO.
OUTPUT TO VALUE(ResetBat).
PUT UNFORMATTED
    "@Echo OFF"                                          SKIP
    "Echo."                                              SKIP
    "Echo   Resetting attributes of processed files ..." SKIP
    "Echo."                                              SKIP.
OUTPUT CLOSE.

PAUSE 0 NO-MESSAGE.
REPEAT:
    SET source.
    pos = 0.
    DO i = LENGTH(source) TO 1 BY -1:
        IF SUBSTRING(source, i, 1) = "\"
        THEN DO:
            pos = i + 1.
            LEAVE.
        END.
    END.
    ASSIGN
    lst  = "C:\PROGRESS.LST\" + SUBSTRING(source, pos, LENGTH(source) - pos) + "LST"
    tel  = tel + 1
    proc = tel / tot * 100
    dest = SUBSTR(source,LENGTH(RootDir) + 1)
    pos  = INDEX(dest,"\")
    dest = RootDir + SUBSTR(dest,1,pos - 1) + ".RUN".
    
    DISPLAY source dest lst tel tot proc WITH FRAME afram.
    OUTPUT TO VALUE(ErrList) APPEND. /* Naam prg. en fouten */
                                     /* in file opvangen */
    FIND FIRST wf WHERE INDEX(source,wf.w-prg) > 0 NO-LOCK NO-ERROR.
    IF AVAIL wf 
    THEN DO:
        PUT SKIP(1)
            wf.w-prg FORMAT "x(40)" wf.w-db FORMAT "x(25)"
            wf.w-ldb FORMAT "x(10)".
        CONNECT VALUE(wf.w-db) -1 -ld VALUE(wf.w-ldb) NO-ERROR.
        IF CONNECTED(wf.w-ldb) THEN PUT " <CONNECTED>" .
                               ELSE PUT " <NOT CONNECTED>".
        PUT SKIP.
    END.
    ELSE
        PUT SKIP(1)
            STRING(source) FORMAT "x(40)" SKIP.

    COMPILE VALUE(source) SAVE INTO VALUE(dest)
         /* LISTING VALUE(lst) PAGE-WIDTH 132 */.
       
    OUTPUT CLOSE.
    IF AVAIL wf THEN DISCONNECT VALUE(wf.w-ldb).

    PAUSE 10 BEFORE-HIDE.
END.

INPUT FROM VALUE(ErrList) NO-ECHO.
wz-l = "".
REPEAT:
IMPORT wz-l.
IF wz-l BEGINS "**" OR wz-l BEGINS "unable" THEN
    DO:
    wz-l = "ERROR".
    LEAVE.
    END.
END.
INPUT CLOSE.

OUTPUT TO VALUE(ResetBat) APPEND.
PUT UNFORMATTED "ATTRIB /S -A \VOTE\*.P" SKIP.
PUT UNFORMATTED "ATTRIB /S -A \VOTE\*.I" SKIP.
PUT UNFORMATTED "ATTRIB /S -A \VOTE\*.G" SKIP.
OUTPUT CLOSE.

ASSIGN
source = "FINISHED !"
dest   = source
lst    = source
source = source + IF wz-l = "ERROR"
                  THEN " (Check " + ErrList + ")"
                  ELSE " (without ERRORS)".

OUTPUT TO VALUE(CallList).
IF wz-l = "ERROR"
THEN PUT UNFORMATTED "Edit " ErrList.
OUTPUT CLOSE.

DISPLAY source dest lst tel tot proc
    WITH FRAME afram.
PAUSE.
QUIT.
