1*549b59edSchristos /* $NetBSD: lutil_meter.h,v 1.2 2021/08/14 16:14:55 christos Exp $ */ 24e6df137Slukem 34e6df137Slukem /* lutil_meter.h - progress meters */ 4d11b170bStron /* $OpenLDAP$ */ 54e6df137Slukem /* This work is part of OpenLDAP Software <http://www.openldap.org/>. 64e6df137Slukem * 7d11b170bStron * Copyright (c) 2009 by Emily Backes, Symas Corp. 84e6df137Slukem * All rights reserved. 94e6df137Slukem * 104e6df137Slukem * Redistribution and use in source and binary forms, with or without 114e6df137Slukem * modification, are permitted only as authorized by the OpenLDAP 124e6df137Slukem * Public License. 134e6df137Slukem * 144e6df137Slukem * A copy of this license is available in the file LICENSE in the 154e6df137Slukem * top-level directory of the distribution or, alternatively, at 164e6df137Slukem * <http://www.OpenLDAP.org/license.html>. 174e6df137Slukem */ 184e6df137Slukem /* ACKNOWLEDGEMENTS: 19d11b170bStron * This work was initially developed by Emily Backes for inclusion 204e6df137Slukem * in OpenLDAP software. 214e6df137Slukem */ 224e6df137Slukem 234e6df137Slukem #ifndef _LUTIL_METER_H 244e6df137Slukem #define _LUTIL_METER_H 254e6df137Slukem 26376af7d7Schristos #include <sys/cdefs.h> 27*549b59edSchristos __RCSID("$NetBSD: lutil_meter.h,v 1.2 2021/08/14 16:14:55 christos Exp $"); 28376af7d7Schristos 294e6df137Slukem #include "portable.h" 304e6df137Slukem 314e6df137Slukem #include <limits.h> 324e6df137Slukem #include <stdio.h> 334e6df137Slukem #include <sys/types.h> 344e6df137Slukem 354e6df137Slukem #include <ac/stdlib.h> 364e6df137Slukem #include <ac/time.h> 374e6df137Slukem 384e6df137Slukem typedef struct { 394e6df137Slukem int (*display_open) (void **datap); 404e6df137Slukem int (*display_update) (void **datap, double frac, time_t remaining_time, time_t elapsed, double byte_rate); 414e6df137Slukem int (*display_close) (void **datap); 424e6df137Slukem } lutil_meter_display_t; 434e6df137Slukem 444e6df137Slukem typedef struct { 454e6df137Slukem int (*estimator_open) (void **datap); 464e6df137Slukem int (*estimator_update) (void **datap, double start, double frac, time_t *remaining_time); 474e6df137Slukem int (*estimator_close) (void **datap); 484e6df137Slukem } lutil_meter_estimator_t; 494e6df137Slukem 504e6df137Slukem typedef struct { 514e6df137Slukem const lutil_meter_display_t *display; 524e6df137Slukem void * display_data; 534e6df137Slukem const lutil_meter_estimator_t *estimator; 544e6df137Slukem void * estimator_data; 554e6df137Slukem double start_time; 564e6df137Slukem double last_update; 57376af7d7Schristos size_t goal_value; 58376af7d7Schristos size_t last_position; 594e6df137Slukem } lutil_meter_t; 604e6df137Slukem 614e6df137Slukem extern const lutil_meter_display_t lutil_meter_text_display; 624e6df137Slukem extern const lutil_meter_estimator_t lutil_meter_linear_estimator; 634e6df137Slukem 644e6df137Slukem extern int lutil_meter_open ( 654e6df137Slukem lutil_meter_t *lutil_meter, 664e6df137Slukem const lutil_meter_display_t *display, 674e6df137Slukem const lutil_meter_estimator_t *estimator, 68376af7d7Schristos size_t goal_value); 694e6df137Slukem extern int lutil_meter_update ( 704e6df137Slukem lutil_meter_t *lutil_meter, 71376af7d7Schristos size_t position, 724e6df137Slukem int force); 734e6df137Slukem extern int lutil_meter_close (lutil_meter_t *lutil_meter); 744e6df137Slukem 754e6df137Slukem #endif /* _LUTIL_METER_H */ 76