mirror of https://github.com/ipxe/ipxe.git
[monojob] Display job status message, if present
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/66/head
parent
a258b0897b
commit
4674df25ef
|
@ -55,6 +55,22 @@ static struct interface_descriptor monojob_intf_desc =
|
||||||
|
|
||||||
struct interface monojob = INTF_INIT ( monojob_intf_desc );
|
struct interface monojob = INTF_INIT ( monojob_intf_desc );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clear previously displayed message
|
||||||
|
*
|
||||||
|
* @v len Length of previously displayed message
|
||||||
|
*/
|
||||||
|
static void monojob_clear ( size_t len ) {
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for ( i = 0 ; i < len ; i++ )
|
||||||
|
putchar ( '\b' );
|
||||||
|
for ( i = 0 ; i < len ; i++ )
|
||||||
|
putchar ( ' ' );
|
||||||
|
for ( i = 0 ; i < len ; i++ )
|
||||||
|
putchar ( '\b' );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wait for single foreground job to complete
|
* Wait for single foreground job to complete
|
||||||
*
|
*
|
||||||
|
@ -73,7 +89,7 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
|
||||||
unsigned long scaled_completed;
|
unsigned long scaled_completed;
|
||||||
unsigned long scaled_total;
|
unsigned long scaled_total;
|
||||||
unsigned int percentage;
|
unsigned int percentage;
|
||||||
int shown_percentage = 0;
|
size_t clear_len = 0;
|
||||||
int ongoing_rc;
|
int ongoing_rc;
|
||||||
int key;
|
int key;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -123,19 +139,21 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
|
||||||
/* Display progress, if applicable */
|
/* Display progress, if applicable */
|
||||||
elapsed = ( now - last_display );
|
elapsed = ( now - last_display );
|
||||||
if ( string && ( elapsed >= TICKS_PER_SEC ) ) {
|
if ( string && ( elapsed >= TICKS_PER_SEC ) ) {
|
||||||
if ( shown_percentage )
|
monojob_clear ( clear_len );
|
||||||
printf ( "\b\b\b\b \b\b\b\b" );
|
|
||||||
/* Normalise progress figures to avoid overflow */
|
/* Normalise progress figures to avoid overflow */
|
||||||
scaled_completed = ( progress.completed / 128 );
|
scaled_completed = ( progress.completed / 128 );
|
||||||
scaled_total = ( progress.total / 128 );
|
scaled_total = ( progress.total / 128 );
|
||||||
if ( scaled_total ) {
|
if ( scaled_total ) {
|
||||||
percentage = ( ( 100 * scaled_completed ) /
|
percentage = ( ( 100 * scaled_completed ) /
|
||||||
scaled_total );
|
scaled_total );
|
||||||
printf ( "%3d%%", percentage );
|
clear_len = printf ( "%3d%%", percentage );
|
||||||
shown_percentage = 1;
|
|
||||||
} else {
|
} else {
|
||||||
printf ( "." );
|
printf ( "." );
|
||||||
shown_percentage = 0;
|
clear_len = 0;
|
||||||
|
}
|
||||||
|
if ( progress.message[0] ) {
|
||||||
|
clear_len += printf ( " [%s]",
|
||||||
|
progress.message );
|
||||||
}
|
}
|
||||||
last_display = now;
|
last_display = now;
|
||||||
}
|
}
|
||||||
|
@ -143,9 +161,7 @@ int monojob_wait ( const char *string, unsigned long timeout ) {
|
||||||
rc = monojob_rc;
|
rc = monojob_rc;
|
||||||
monojob_close ( &monojob, rc );
|
monojob_close ( &monojob, rc );
|
||||||
|
|
||||||
if ( shown_percentage )
|
monojob_clear ( clear_len );
|
||||||
printf ( "\b\b\b\b \b\b\b\b" );
|
|
||||||
|
|
||||||
if ( string ) {
|
if ( string ) {
|
||||||
if ( rc ) {
|
if ( rc ) {
|
||||||
printf ( " %s\n", strerror ( rc ) );
|
printf ( " %s\n", strerror ( rc ) );
|
||||||
|
|
Loading…
Reference in New Issue