#include <xpk/xpk.h>

#ifdef __MAXON__
  #define __asm
  #define __saveds
#endif

ULONG __asm __saveds chunkfunc(register __a1 struct XpkProgress *prog)
{
  ULONG i;

  switch(prog->xp_Type)
  {
  case XPKPROG_START: PutStr("Start: "); break;
  case XPKPROG_MID: PutStr("\rMid  : "); break;
  case XPKPROG_END: PutStr("\rEnd  : "); break;
  }

  if(prog->xp_Type != XPKPROG_END)
    Printf("%4s: %-8s (%3ld%% done, %2ld%% CF, %6ld cps) %s",
      prog->xp_PackerName, prog->xp_Activity, prog->xp_Done,
      prog->xp_CF, prog->xp_Speed, prog->xp_FileName);
  else
    Printf("%4s: %-8s (%3ldK, %2ld%% CF, %6ld cps) %s\033[K\n",
      prog->xp_PackerName, prog->xp_Activity, prog->xp_ULen >> 10,
      prog->xp_CF, prog->xp_Speed, prog->xp_FileName);

  Flush(Output());
  if((i = SetSignal(0, SIGBREAKF_CTRL_C) & SIGBREAKF_CTRL_C))
    Printf("\n");
  return i;
}

struct Hook chunkhook = { {0}, (ULONG (*)()) chunkfunc};

