import Ġd us k . il c . emitter . n asm . N AS ME mit ter Ċ import Ġd us k . il c . parser . Text Parser Ċ import Ġjava . io . File Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ Ċ // ĉ val Ġlist Ġ= ĠInstruction List (). apply Ġ{ Ċ // ĉ ĉ add Push String (" world ") Ċ // ĉ ĉ add Push String (" Hello , Ġ% s ! % n ") Ċ // ĉ ĉ add Call ("_ printf ", ĠType String , ĠType Unsigned 3 2 ) Ċ // ĉ ĉ add Delete () Ċ // ĉ } ĊĊ ĉ val Ġinput Ġ= ĠClassLoader . getSystem ClassLoader (). getResource AsStream (" print . il ") Ċ // ĉ val Ġinput Ġ= ĠFile (" test . fd asm "). inputStream () Ċ ĉ val Ġlist Ġ= ĠText Parser . parse ( input ) Ċ // ĉ val Ġlist Ġ= ĠBinary Parser . parse ( input ) Ċ Ċ // ĉ Flags . verbose Ġ= Ġtrue Ċ Ċ // ĉ Binary Emitter . emit ( list , ĠFile (" test . d so "). output Stream ()) ĊĊ ĉ val Ġms Ġ= Ġmeasure Time Millis Ġ{ Ċĉ ĉ val Ġfile Ġ= ĠFile (" test . asm ") Ċĉ ĉ N AS ME mit ter ( true ). emit ( list , Ġfile . output Stream ()) ĊĊĉ ĉ val Ġruntime Ġ= ĠRuntime . get Runtime () Ċĉ ĉ val Ġexec N ASM Ġ= Ġruntime . exec ( array Of (" n asm ", Ġ"- f ", Ġ" elf ", Ġ"- o ", Ġ" test . o ", Ġ" test . asm ")) Ċĉ ĉ val Ġexit N ASM Ġ= Ġexec N ASM . waitFor () Ċĉ ĉ if Ġ( exit N ASM Ġ!= Ġ 0 ) Ġ{ Ċĉĉ ĉ System . err . println (" N ASM Ġfailed ") Ċĉĉ ĉ System . err . println ( exec N ASM . error Stream . reader (). use Ġ{ Ġit . read Text () Ġ}) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ val Ġexec GCC Ġ= Ġruntime . exec ( array Of ( Ċĉĉĉ ĉ " gcc ", Ċĉĉĉ ĉ "- m 3 2 ", Ċĉĉĉ ĉ "- o ", Ġ" test . exe ", Ċĉĉĉ ĉ " test . o ", Ċĉĉĉ ĉ " C :\\ Windows \\ Sys WO W 6 4 \\ opengl 3 2 . dll ", Ċĉĉĉ ĉ " C :\\ Windows \\ Sys WO W 6 4 \\ glu 3 2 . dll ", Ċĉĉĉ ĉ " gl ut 3 2 . dll " Ċĉ ĉ )) Ċĉ ĉ val Ġexit GCC Ġ= Ġexec GCC . waitFor () Ċĉ ĉ if Ġ( exit GCC Ġ!= Ġ 0 ) Ġ{ Ċĉĉ ĉ System . err . println (" GCC Ġfailed ") Ċĉĉ ĉ System . err . println ( exec GCC . error Stream . reader (). use Ġ{ Ġit . read Text () Ġ}) Ċĉĉ ĉ return Ċĉ ĉ } ĊĊĉ ĉ println (" Executing ...") Ċĉ ĉ Process Builder (" test . exe "). inherit IO (). start (). waitFor () Ċ // ĉ ĉ val Ġexec Program Ġ= Ġruntime . exec ( array Of (" test . exe ")) Ċ // ĉ ĉ println (" EXECUT ING ĠPRO GRAM :") Ċ // ĉ ĉ val Ġreader Ġ= Ġexec Program . inputStream . buffered Reader () Ċ // ĉ ĉ while ( exec Program . is Alive ) Ġ{ Ċ // ĉĉ ĉ println ( reader . readLine ()) Ċ // ĉ ĉ } Ċ // ĉ ĉ reader . close () Ċ ĉ } Ċ ĉ println (" Done , Ġtook Ġ${ ms } ms ") Ċ }