1*9663SMark.Logan@Sun.COM /* 2*9663SMark.Logan@Sun.COM libparted - a library for manipulating disk partitions 3*9663SMark.Logan@Sun.COM Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc. 4*9663SMark.Logan@Sun.COM 5*9663SMark.Logan@Sun.COM This program is free software; you can redistribute it and/or modify 6*9663SMark.Logan@Sun.COM it under the terms of the GNU General Public License as published by 7*9663SMark.Logan@Sun.COM the Free Software Foundation; either version 3 of the License, or 8*9663SMark.Logan@Sun.COM (at your option) any later version. 9*9663SMark.Logan@Sun.COM 10*9663SMark.Logan@Sun.COM This program is distributed in the hope that it will be useful, 11*9663SMark.Logan@Sun.COM but WITHOUT ANY WARRANTY; without even the implied warranty of 12*9663SMark.Logan@Sun.COM MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*9663SMark.Logan@Sun.COM GNU General Public License for more details. 14*9663SMark.Logan@Sun.COM 15*9663SMark.Logan@Sun.COM You should have received a copy of the GNU General Public License 16*9663SMark.Logan@Sun.COM along with this program. If not, see <http://www.gnu.org/licenses/>. 17*9663SMark.Logan@Sun.COM */ 18*9663SMark.Logan@Sun.COM 19*9663SMark.Logan@Sun.COM /** 20*9663SMark.Logan@Sun.COM * \addtogroup PedTimer 21*9663SMark.Logan@Sun.COM * @{ 22*9663SMark.Logan@Sun.COM */ 23*9663SMark.Logan@Sun.COM 24*9663SMark.Logan@Sun.COM /** \file timer.h */ 25*9663SMark.Logan@Sun.COM 26*9663SMark.Logan@Sun.COM #ifndef PED_TIMER_H_INCLUDED 27*9663SMark.Logan@Sun.COM #define PED_TIMER_H_INCLUDED 28*9663SMark.Logan@Sun.COM 29*9663SMark.Logan@Sun.COM #include <time.h> 30*9663SMark.Logan@Sun.COM 31*9663SMark.Logan@Sun.COM typedef struct _PedTimer PedTimer; 32*9663SMark.Logan@Sun.COM 33*9663SMark.Logan@Sun.COM typedef void PedTimerHandler (PedTimer* timer, void* context); 34*9663SMark.Logan@Sun.COM 35*9663SMark.Logan@Sun.COM /* 36*9663SMark.Logan@Sun.COM * Structure keeping track of progress and time 37*9663SMark.Logan@Sun.COM */ 38*9663SMark.Logan@Sun.COM struct _PedTimer { 39*9663SMark.Logan@Sun.COM float frac; /**< fraction of operation done */ 40*9663SMark.Logan@Sun.COM time_t start; /**< time of start of op */ 41*9663SMark.Logan@Sun.COM time_t now; /**< time of last update (now!) */ 42*9663SMark.Logan@Sun.COM time_t predicted_end; /**< expected finish time */ 43*9663SMark.Logan@Sun.COM const char* state_name; /**< eg: "copying data" */ 44*9663SMark.Logan@Sun.COM PedTimerHandler* handler; /**< who to notify on updates */ 45*9663SMark.Logan@Sun.COM void* context; /**< context to pass to handler */ 46*9663SMark.Logan@Sun.COM }; 47*9663SMark.Logan@Sun.COM 48*9663SMark.Logan@Sun.COM extern PedTimer* ped_timer_new (PedTimerHandler* handler, void* context); 49*9663SMark.Logan@Sun.COM extern void ped_timer_destroy (PedTimer* timer); 50*9663SMark.Logan@Sun.COM 51*9663SMark.Logan@Sun.COM /* a nested timer automatically notifies it's parent. You should only 52*9663SMark.Logan@Sun.COM * create one when you are going to use it (not before) 53*9663SMark.Logan@Sun.COM */ 54*9663SMark.Logan@Sun.COM extern PedTimer* ped_timer_new_nested (PedTimer* parent, float nest_frac); 55*9663SMark.Logan@Sun.COM extern void ped_timer_destroy_nested (PedTimer* timer); 56*9663SMark.Logan@Sun.COM 57*9663SMark.Logan@Sun.COM extern void ped_timer_touch (PedTimer* timer); 58*9663SMark.Logan@Sun.COM extern void ped_timer_reset (PedTimer* timer); 59*9663SMark.Logan@Sun.COM extern void ped_timer_update (PedTimer* timer, float new_frac); 60*9663SMark.Logan@Sun.COM extern void ped_timer_set_state_name (PedTimer* timer, const char* state_name); 61*9663SMark.Logan@Sun.COM 62*9663SMark.Logan@Sun.COM #endif /* PED_TIMER_H_INCLUDED */ 63*9663SMark.Logan@Sun.COM 64*9663SMark.Logan@Sun.COM 65*9663SMark.Logan@Sun.COM /** @} */ 66