package Ġui . interpreter Ċ Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . lazy . Lazy Column Ċ import Ġandroidx . compose . foundation . lazy . items Indexed Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy List State Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . Rectangle Shape Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Overflow Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġmodel . Address Ċ import Ġmodel . Command Ċ import Ġtheme . Light Gray Shade Ċ import Ġtheme . Red code Theme Ċ import Ġtheme . Red code Theme . body 3 Ċ import Ġui . interpreter . model . Actions State Ċ import Ġui . interpreter . model . Interpreter State Ċ Ċ @ Composable Ċ fun ĠInterpreter ( ĊĠĠĠ Ġsource Code : ĠString , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ Ġval Ġinterpreter Ġ= Ġremember Ġ{ ĠInterpreter State () Ġ} ĊĠĠĠ Ġval Ġscroll State Ġ= Ġremember Lazy List State () ĊĠĠĠ Ġval Ġactions Ġ= Ġremember Ġ{ ĊĠĠĠĠĠĠĠ ĠActions State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Single Step Click Ġ= Ġ{ Ġinterpreter . step () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Execute Click Ġ= Ġ{ Ġinterpreter . isIn Execute Mode Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Stop Click Ġ= Ġ{ Ġinterpreter . isIn Execute Mode Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Reset Click Ġ= Ġ{ Ġinterpreter . reset () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Jump To Click Ġ= Ġ{ Ġposition Ġ-> Ġinterpreter . scroll Position Ġ= Ġposition Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġactions . scroll Position Ġ= Ġinterpreter . scroll Position ĊĠĠĠ Ġactions . current Line Ġ= Ġinterpreter . current Line ĊĊĠĠĠ Ġif Ġ( interpreter . sourceCode Ġ!= Ġsource Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterpreter . set Program Source Code ( sourceCode ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠLa unched Effect ( interpreter . scroll Position ) Ġ{ ĊĠĠĠĠĠĠĠ Ġscroll State . scrollTo Item ( interpreter . scroll Position ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠLa unched Effect ( interpreter . isIn Execute Mode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterpreter . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . fill MaxSize (), ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠRed code Theme . arrange ment ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" INTER PRE TER ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠMaterial Theme . typography . subtitle 2 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠRow ( horizontal Arrange ment Ġ= ĠRed code Theme . arrange ment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 0 . 8 f ). background ( Color . Light Gray Shade ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTable Header Row () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Column ( state Ġ= Ġscroll State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . height ( 1 6 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Indexed ( interpreter . program . commands ) Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTable Command Row ( index , Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . weight ( 0 . 4 f ). fill Max Height ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButtons Column ( actions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠTable Header Row ( modifier : ĠModifier Ġ= ĠModifier ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġvertical Arrange ment Ġ= ĠRed code Theme . arrange ment ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠRow ( modifier Ġ= ĠModifier . fill Max Width (). padding ( top Ġ= Ġ 1 6 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Text Ce il (" LINE ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Text Ce il (" COMMAND ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Text Ce il (" ADDR ĠA ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTable Text Ce il (" ADDR ĠB ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDiv ider ( modifier Ġ= ĠModifier . fill Max Width ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠTable Command Row ( ĊĠĠĠ Ġindex : ĠInt , ĊĠĠĠ Ġcommand : ĠCommand , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( if Ġ( command . isSelected ) ĠColor . White Ġelse ĠColor . Light Gray Shade ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTable Text Ce il ( index . toString ()) ĊĠĠĠĠĠĠĠ ĠTable Text Ce il ( command . name ) ĊĠĠĠĠĠĠĠ ĠTable Text Ce il ( command . operand A . toString ()) ĊĠĠĠĠĠĠĠ ĠTable Text Ce il ( command . operand B . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠColumn Scope . Buttons Column ( ĊĠĠĠ Ġactions : ĠActions State , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġjump To Position Ġby Ġremember Ġ{ Ġmutable State Of ( actions . scroll Position . toString ()) Ġ} ĊĠĠĠ ĠOut lined ActionButton ( text Ġ= Ġ" Run ", ĠonClick Ġ= Ġactions . on Execute Click , Ġmodifier Ġ= Ġmodifier ) ĊĠĠĠ ĠOut lined ActionButton ( text Ġ= Ġ" Stop ", ĠonClick Ġ= Ġactions . on Stop Click , Ġmodifier Ġ= Ġmodifier ) ĊĠĠĠ ĠOut lined ActionButton ( text Ġ= Ġ" Next ", ĠonClick Ġ= Ġactions . on Single Step Click , Ġmodifier Ġ= Ġmodifier ) ĊĠĠĠ ĠOut lined ActionButton ( text Ġ= Ġ" Reset ", ĠonClick Ġ= Ġactions . on Reset Click , Ġmodifier Ġ= Ġmodifier ) ĊĠĠĠ ĠSp acer ( Modifier . height ( 8 . dp )) ĊĠĠĠ ĠTextField ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġjump To Position , ĊĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText (" Jump Ġto ") Ġ}, ĊĠĠĠĠĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠTextField Defaults . textField Colors ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠbackgroundColor Ġ= ĠColor . Light Gray Shade , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfocused Indicator Color Ġ= ĠColor . Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisabled Indicator Color Ġ= ĠColor . Transparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun focused Indicator Color Ġ= ĠColor . Transparent ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjump To Position Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġtext . filter ( Char :: is Digit ). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . on Jump To Click ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠRectangle Shape ĊĠĠĠ Ġ) ĊĠĠĠ ĠSp acer ( Modifier . height ( 8 . dp )) ĊĠĠĠ Ġif Ġ( actions . current Line Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" LINE : Ġ${ actions . current Line }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠRed code Theme . typography . body 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= Ġ 1 3 . sp , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier . click able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactions . on Jump To Click ( actions . current Line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ ĠSp acer ( Modifier . weight ( 1 f )) ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐĲ Ð² ÑĤÐ¾ÑĢ : ĠÐĳ Ñĥ ÑĪ Ñĥ ÐµÐ² ĠÐĿ Ð¸Ðº Ð¸ÑĤ Ð° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐļ ÑĥÑĢ Ñģ : Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐĿ Ð°Ð¿ ÑĢÐ°Ð² Ð»ÐµÐ½Ð¸Ðµ : ĠÐĺ Ð¡ Ð¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐĶ Ð°ÑĤÐ° : Ġ 0 5 . 1 2 . 2 0 2 1 Ġ- Ġ 1 0 . 1 2 . 2 0 2 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐĲ Ð´ ÑĢÐµÑģ Ð°ÑĨÐ¸Ñı : Ġ${ Address . all }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠÐļ Ð¾Ð¼ Ð°Ð½Ð´ Ñĭ : Ġ${ Command . all } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠ Ġstyle Ġ= ĠRed code Theme . typography . body 3 , ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Gray ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ fun ĠRow Scope . Table Text Ce il ( ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ Ġis Header : ĠBoolean Ġ= Ġfalse Ċ ) Ġ= ĠText ( ĊĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠ Ġmodifier Ġ= ĠModifier . weight ( 1 f ), ĊĠĠĠ ĠtextAlign Ġ= ĠText Align . Center , ĊĠĠĠ Ġstyle Ġ= Ġif Ġ( is Header ) ĠRed code Theme . typography . subtitle 2 Ġelse ĠRed code Theme . typography . body 2 , ĊĠĠĠ Ġmax Lines Ġ= Ġ 1 , ĊĠĠĠ Ġoverflow Ġ= ĠText Overflow . El lipsis Ċ ) Ċ Ċ @ Composable Ċ fun ĠOut lined ActionButton ( ĊĠĠĠ Ġtext : ĠString , ĊĠĠĠ ĠonClick : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier Ċ ) Ġ= ĠOut lined Button ( ĊĠĠĠ ĠonClick Ġ= ĠonClick , ĊĠĠĠ Ġshape Ġ= ĠRectangle Shape , ĊĠĠĠ Ġmodifier Ġ= Ġmodifier . fill Max Width () Ċ ) Ġ{ ĊĠĠĠ ĠText ( text ) Ċ } Ċ