void dlog_string_ack( char *ackstr[ ], size_t ackcnt ) { dlog_multi_ack( ackstr, ackcnt ); }
bool_t Media_prompt_change( drive_t *drivep ) { fold_t fold; char question[ 100 ]; char *preamblestr[ PREAMBLEMAX ]; size_t preamblecnt; char *querystr[ QUERYMAX ]; size_t querycnt; char *choicestr[ CHOICEMAX ]; size_t choicecnt; char *ackstr[ ACKMAX ]; size_t ackcnt; char *postamblestr[ POSTAMBLEMAX ]; size_t postamblecnt; ix_t doix; ix_t dontix; ix_t responseix; ix_t sigintix; retry: preamblecnt = 0; fold_init( fold, _("change media dialog"), '=' ); preamblestr[ preamblecnt++ ] = "\n"; preamblestr[ preamblecnt++ ] = fold; preamblestr[ preamblecnt++ ] = "\n\n"; ASSERT( preamblecnt <= PREAMBLEMAX ); dlog_begin( preamblestr, preamblecnt ); /* query: ask if media changed or declined */ sprintf( question, _( "please change media in " "drive %u\n"), (unsigned int)drivep->d_index ); querycnt = 0; querystr[ querycnt++ ] = question; ASSERT( querycnt <= QUERYMAX ); choicecnt = 0; dontix = choicecnt; choicestr[ choicecnt++ ] = _("media change declined"); doix = choicecnt; choicestr[ choicecnt++ ] = _("media changed"); ASSERT( choicecnt <= CHOICEMAX ); sigintix = IXMAX - 1; responseix = dlog_multi_query( querystr, querycnt, choicestr, choicecnt, 0, /* hilitestr */ IXMAX, /* hiliteix */ 0, /* defaultstr */ doix, /* defaultix */ DLOG_TIMEOUT, dontix, /* timeout ix */ sigintix, /* sigint ix */ dontix, /* sighup ix */ dontix ); /* sigquit ix */ ackcnt = 0; if ( responseix == doix ) { ackstr[ ackcnt++ ] = _("examining new media\n"); } else if ( responseix == dontix ) { ackstr[ ackcnt++ ] = _("media change aborted\n"); } else { ASSERT( responseix == sigintix ); ackstr[ ackcnt++ ] = _("keyboard interrupt\n"); } ASSERT( ackcnt <= ACKMAX ); dlog_multi_ack( ackstr, ackcnt ); postamblecnt = 0; fold_init( fold, _("end dialog"), '-' ); postamblestr[ postamblecnt++ ] = "\n"; postamblestr[ postamblecnt++ ] = fold; postamblestr[ postamblecnt++ ] = "\n\n"; ASSERT( postamblecnt <= POSTAMBLEMAX ); dlog_end( postamblestr, postamblecnt ); if ( responseix == sigintix ) { if ( cldmgr_stop_requested( )) { return BOOL_FALSE; } sleep( 1 ); /* to allow main thread to begin dialog */ mlog( MLOG_NORMAL | MLOG_BARE, "" ); /* to block until main thread dialog complete */ sleep( 1 ); /* to allow main thread to request children die */ if ( cldmgr_stop_requested( )) { return BOOL_FALSE; } mlog( MLOG_DEBUG, "retrying media change dialog\n" ); goto retry; } return responseix == doix; }