` Printed Icetips Article

Icetips Article



Par2: Progress during build
2003-03-20 -- Ben Kim
 
!----------------------------------------------------------------
! In the DATA SECTION Before Window Declarations:
!----------------------------------------------------------------
FileRef           &FILE
FileOpened    BYTE
Progress1       LONG(0)
CurrentFile     STRING(60)
!----------------------------------------------------------------
! Define a Window that shows progress bar
!----------------------------------------------------------------
ProgressWindow WINDOW('File Optimization Status Window.  Please
Wait...'),AT(,,226,34),CENTER,GRAY,DOUBLE

STRING(@s60),AT(5,5,216,10),USE(CurrentFile),CENTER,FONT('Arial',10,COLOR:Na
vy,FONT:bold+FONT:italic)
       PROGRESS,USE(Progress1),AT(5,18,216,10),RANGE(0,100)
     END
!----------------------------------------------------------------
! Define a ROUTINE to pack the files
!----------------------------------------------------------------
PackFile ROUTINE
   OPEN(ProgressWindow)
   Progress1 = 0
   CurrentFile = CENTER(CLIP(FileRef{PROP:Name}) & ': ' & Progress1 & '%
Completed',SIZE(CurrentFile))

   DISPLAY()

   ACCEPT
        CASE EVENT()
        OF EVENT:OpenWindow
            DO ManageFile
        OF EVENT:BuildFile
        OROF EVENT:BuildKey
            Progress1 = FileRef{PROP:Completed}
            CurrentFile = CENTER(CLIP(FileRef{PROP:Name}) & ': ' & Progress1
& '% Completed',SIZE(CurrentFile))
            DISPLAY()
        OF EVENT:BuildDone
            POST(EVENT:User)
        OF EVENT:User
            Progress1 = 100
            CurrentFile = CENTER(CLIP(FileRef{PROP:Name}) & ': ' & Progress1
& '% Completed',SIZE(CurrentFile))
            DISPLAY()
            IF FileOpened = True
                CLOSE(FileRef)
                FileOpened = False
            END
            BREAK
        OF EVENT:Accepted
            POST(EVENT:User)
        END
   END

   CLOSE(ProgressWindow)

   EXIT
!----------------------------------------------------------------
! Define a ROUTINE to open file referenced exclusively
!----------------------------------------------------------------
ManageFile  ROUTINE
    FileOpened = False
    OPEN(FileRef, 12h)    !Open In Exclusive Access Mode
    CASE ERRORCODE()
    OF NoError
    OROF BadKeyErr
        FileOpened = True
        SEND(FileRef,'FULLBUILD=on')
        FileRef{PROP:ProgressEvents} = 100
        PACK(FileRef)
        Progress1 = FileRef{PROP:Completed}
        CurrentFile = CENTER(CLIP(FileRef{PROP:Name}) & ': ' & Progress1 &
'% Completed',SIZE(CurrentFile))
        DISPLAY()
    OF NoFileErr
        POST(EVENT:User)
    ELSE
        DO InvalidAccess
    END

!----------------------------------------------------------------
! Handle Exceptions
!----------------------------------------------------------------
InvalidAccess   ROUTINE
    BEEP(BEEP:SystemExclamation)
    MESSAGE('Could not open the file: ' & |
                        CLIP(FileRef{PROP:Name}) & '.  ' & |
                        'Please be sure you are not running the system on
this or another PC.', |
                        'File Access Error', ICON:Exclamation, BUTTON:OK)
    POST(EVENT:User)

!----------------------------------------------------------------
! Make calls to the PACKFILE ROUTINE to pack each file where ever you decide
(OK Accepted - or whatever)
!----------------------------------------------------------------
   FileRef &= MyFile1
   DO PackFile

   FileRef &= MyFile2
   DO PackFile

   FileRef &= MyFile3
   DO PackFile

   FileRef &= MyFileX
   DO PackFile



Printed May 4, 2024, 3:27 pm
This article has been viewed/printed 35115 times.