linux_status.cc 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /********************************************************************** <BR>
  2. This file is part of Crack dot Com's free source code release of
  3. Golgotha. <a href="http://www.crack.com/golgotha_release"> <BR> for
  4. information about compiling & licensing issues visit this URL</a>
  5. <PRE> If that doesn't help, contact Jonathan Clark at
  6. golgotha_source@usa.net (Subject should have "GOLG" in it)
  7. ***********************************************************************/
  8. enum { I4_STAT_LEN=70 };
  9. #include "status/status.hh"
  10. #include <stdlib.h>
  11. class i4_linux_status_class : public i4_status_class
  12. {
  13. public:
  14. int last_percent;
  15. i4_linux_status_class() { last_percent=0; }
  16. virtual i4_bool update(float per)
  17. {
  18. while (per*I4_STAT_LEN > last_percent)
  19. {
  20. fprintf(stderr,".");
  21. last_percent++;
  22. }
  23. }
  24. virtual ~i4_linux_status_class()
  25. {
  26. int i;
  27. while (last_percent<I4_STAT_LEN)
  28. {
  29. fprintf(stderr,".");
  30. last_percent++;
  31. }
  32. for (i=0; i<=I4_STAT_LEN; i++) // backup
  33. fprintf(stderr,"%c",'\b');
  34. for (i=0; i<=I4_STAT_LEN+1; i++) // erase
  35. fprintf(stderr,"%c",' ');
  36. for (i=0; i<=I4_STAT_LEN+1; i++) // and backup again
  37. fprintf(stderr,"%c",'\b');
  38. }
  39. };
  40. // this is operating system dependant
  41. i4_status_class *i4_create_status(const i4_const_str &description, int allow_cancel)
  42. {
  43. int i,j=description.length()>I4_STAT_LEN ? I4_STAT_LEN : description.length();
  44. fprintf(stderr,"[");
  45. i4_const_str::iterator it=description.begin();
  46. for (i=0; i<j;i++, ++it)
  47. fprintf(stderr,"%c",it.get().value());
  48. for (i=0; i<I4_STAT_LEN-j; i++)
  49. fprintf(stderr,"%c",' ');
  50. fprintf(stderr,"]");
  51. for (i=0; i<=I4_STAT_LEN; i++) // erase
  52. fprintf(stderr,"%c",'\b');
  53. return new i4_linux_status_class;
  54. }