long ExecCmd( const char *file_in, const char *file_out, const char *cmd ) { int len; unsigned long stat; char *err; char buff[256]; int linked; err = BatchLink( NULL ); if( err != NULL ) { printf( "link error: %s\n", err ); exit( 1 ); } BatchSpawn( cmd ); for( ;; ) { len = BatchCollect( buff, sizeof( buff ), &stat ); if( len == -1 ) { printf( "done: status = %d\n", stat ); break; } else if( kbhit() ) { if( getch() == 'a' ) { BatchAbort(); } else { BatchCancel(); } } else if( len != 0 ) { buff[len] = '\0'; printf( "%s", buff ); fflush( stdout ); } } return( 1 ); }
void VMsgLog::runCmd( WString &cmd ) { static char buff[MAX_BUFF+1]; addLine( cmd ); blength = 0; buffer[blength] = '\0'; if( !_batserv ) { #ifdef __WINDOWS__ VxDPut( cmd.gets(), cmd.size() + 1 ); for(;;) { int len = VxDGet( buff, MAX_BUFF ); buff[len] = '\0'; if( streq( buff, TERMINATE_COMMAND_STR ) ) { break; } else if( len > 0 ) { scanLine( buff, len ); } } #endif } else { unsigned maxlen; maxlen = BatchMaxCmdLine(); cmd.truncate( maxlen ); BatchSpawn( cmd ); for( ;; ) { WSystemService::sysYield(); //allow other tasks to run unsigned long stat; int len = BatchCollect( buff, MAX_BUFF, &stat ); if( len < 0 ) { break; } else if( len > 0 ) { scanLine( buff, len ); } } } if( strlen( buffer ) > 0 ) { addLine( buffer ); } }