import Ġjavafx . application . Platform Ċ import Ġjavafx . scene . control . ProgressBar Ċ import Ġjavafx . scene . control . Progress Indicator Ċ import Ġjavafx . scene . control . TextInput Control Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . thread Ċ Ċ class ĠROM Flash er ( ĊĠĠĠ Ġvar Ġprogress : ĠProgress Bar , ĊĠĠĠ Ġvar Ġprogress ind : ĠProgress Indicator , ĊĠĠĠ Ġvar Ġt ic : ĠText Input Control , ĊĠĠĠ Ġvar Ġdirectory : ĠFile Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpb : ĠProcess Builder Ġ= ĠProcess Builder () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproc : ĠProcess ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscan : ĠScanner ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġpb . directory ( File ( System . getProperty (" user . home "), Ġ" xa ft _ tmp ")) ĊĠĠĠĠĠĠĠ Ġpb . redirect Error Stream ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Cmd Count ( file : ĠFile ): ĠInt Ġ= Ġfile . read Text (). split (" fast boot "). size Ġ- Ġ 1 ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Script ( arg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠFile ( directory , Ġ"$ arg . sh "). read Text (). replace (" fast boot ", Ġ"./ fast boot ") ĊĠĠĠĠĠĠĠ Ġval Ġscript Ġ= ĠFile ( directory , Ġ" script . sh ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript . write Text ( content ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠException Alert ( ex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscript . set Executable ( true , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexec ( arg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġt ic . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuffer ("") ĊĠĠĠĠĠĠĠ Ġval Ġscript : ĠFile ĊĠĠĠĠĠĠĠ Ġif Ġ(" win " Ġin ĠSystem . getProperty (" os . name "). toLowerCase ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ= ĠFile ( directory , Ġ"$ arg . bat ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpb . command (" cmd . exe ", Ġ"/ c ", Ġscript . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Script ( arg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscript Ġ= ĠFile ( directory , Ġ" script . sh ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpb . command (" sh ", Ġ"- c ", Ġscript . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġget Cmd Count ( script ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproc Ġ= Ġpb . start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠException Alert ( ex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġscan Ġ= ĠScanner ( proc . inputStream ). use Delimiter ("") ĊĠĠĠĠĠĠĠ Ġprogress . progress Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġprogress ind . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġthread ( true , Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( scan . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( scan . next ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġsb . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" pause " Ġin Ġline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ic . text Ġ= Ġline ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ic . append Text ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress . progress Ġ= Ġ 1 . 0 Ġ* Ġ( line . toLowerCase (). split (" finished . "). size Ġ- Ġ 1 ) Ġ/ Ġn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscan . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlatform . run Later Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt ic . append Text ("\ n Done !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress . progress Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress ind . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" script " Ġin Ġscript . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscript . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ