home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
packery
/
xpk_source
/
xpkmaster
/
progress.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-28
|
1KB
|
57 lines
#ifndef XPKMASTER_PROGRESS_C
#define XPKMASTER_PROGRESS_C
/* Routinesheader
Name: progress.c
Main: xpkmaster
Versionstring: $VER: progress.c 1.0 (06.10.96)
Author: SDI
Distribution: PD
Description: Progress report handler
1.0 06.10.96 : first real version
*/
#include <exec/types.h>
#include <pragma/intuition_lib.h>
#include "xpkmaster.h"
LONG callprogress(struct XpkBuffer *xbuf)
{
struct XpkProgress *prog = &xbuf->xb_Prog;
if(!xbuf->xb_ChunkHook)
return 0;
if(prog->xp_ULen)
{
ULONG secs, mics, time, freq;
/* ToDo: Test for >=V36 and use ReadEClock */
CurrentTime(&secs, &mics);
freq = 128;
/* time = (secs - xbuf->xb_Secs)*freq + mics/(1000000/freq) - xbuf->xb_Mics/(1000000/freq); */
time = (secs - xbuf->xb_Secs)*freq + (mics+1000000-xbuf->xb_Mics)/(1000000/freq) - freq;
if (prog->xp_UCur < 30000000)
prog->xp_Speed = (freq * prog->xp_UCur) / (time + 1);
else
prog->xp_Speed = prog->xp_UCur / (time/freq + 1);
prog->xp_Done = prog->xp_ULen ? 100 * prog->xp_UCur/prog->xp_ULen : 100;
if(prog->xp_UCur > 20)
if((prog->xp_CF = 100 - 100 * prog->xp_CCur / prog->xp_UCur) < 0)
prog->xp_CF = 0;
}
else
prog->xp_Speed = 0;
if(MyCallHookPkt(xbuf->xb_ChunkHook, prog A4SUPP2))
xbuf->xb_Result = XPKERR_ABORTED;
return xbuf->xb_Result;
}
#endif /* XPKMASTER_PROGRESS_C */