package Ġimg ui . img ui . demo . show Example App Ċ Ċ import Ġglm _. vec 2 . Vec 2 Ċ import Ġimg ui . Cond Ċ import Ġimg ui . ImGui . begin _ Ċ import Ġimg ui . ImGui . end Ċ import Ġimg ui . ImGui . menuItem Ċ import Ġimg ui . ImGui . set Next Window Size Ċ import Ġimg ui . ImGui . text Wrapped Ċ import Ġimg ui . functional Programming . popup Context Item Ċ import Ġuno . kotlin . getValue Ċ import Ġuno . kotlin . setValue Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ import Ġimg ui . Color Edit Flag Ġas ĠC ef Ċ import Ġimg ui . Input Text Flag Ġas ĠIt f Ċ import Ġimg ui . Selectable Flag Ġas ĠS f Ċ import Ġimg ui . TreeNode Flag Ġas ĠT nf Ċ import Ġimg ui . Window Flag Ġas ĠW f Ċ Ċ object ĠConsole Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon str ating Ġcreating Ġa Ġsimple Ġconsole Ġwindow , Ġwith Ġscrolling , Ġfiltering , Ġcompletion Ġand Ġhistory . ĊĠĠĠĠ Ġ* Ġ ĠFor Ġthe Ġconsole Ġexample , Ġhere Ġwe Ġare Ġusing Ġa Ġmore ĠC ++ Ġlike Ġapproach Ġof Ġdeclaring Ġa Ġclass Ġto Ġhold Ġthe Ġdata Ġand ĊĠĠĠĠ Ġ* Ġ Ġthe Ġfunctions . Ġ Ġ*/ ĊĠĠĠ Ġval Ġconsole Ġ= ĠExample App Console () ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ= Ġconsole . draw (" Example : ĠConsole ", Ġopen ) ĊĊĠĠĠ Ġclass ĠExample App Console Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġchar ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Buf [ 2 5 6 ]; Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < char *> ĠĠĠĠĠĠ ĠItems ; Ċ // ĠĠĠĠĠĠĠ Ġbool ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom ; Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < char *> ĠĠĠĠĠĠ ĠHistory ; Ċ // ĠĠĠĠĠĠĠ Ġint ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos ; ĠĠĠ Ġ// Ġ- 1 : Ġnew Ġline , Ġ 0 .. History . Size - 1 Ġb rowsing Ġhistory . Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < const Ġchar *> ĠCommands ; Ċ // Ċ // ĠĠĠĠĠĠĠ ĠExample App Console () Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmemset ( Input Buf , Ġ 0 , Ġsizeof ( Input Buf )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" HELP "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" HISTORY "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" CLEAR "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" CLAS SI FY "); Ġ Ġ// Ġ" classify " Ġis Ġonly Ġhere Ġto Ġprovide Ġan Ġexample Ġof Ġ" C "+ [ tab ] Ġcomplet ing Ġto Ġ" CL " Ġand Ġdisplaying Ġmatches . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Welcome Ġto ĠDe ar ĠImGui !"); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ~ Example App Console () Ċ // ĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠHistory . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠ Ġfree ( History [ i ]); Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠPort able Ġhelpers Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠĠ ĠS tric mp ( const Ġchar * Ġstr 1 , Ġconst Ġchar * Ġstr 2 ) ĠĠĠĠĠĠĠĠ Ġ{ Ġint Ġd ; Ġwhile Ġ(( d Ġ= Ġto upper (* str 2 ) Ġ- Ġto upper (* str 1 )) Ġ== Ġ 0 Ġ&& Ġ* str 1 ) Ġ{ Ġstr 1 ++; Ġstr 2 ++; Ġ} Ġreturn Ġd ; Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠĠ ĠStr nic mp ( const Ġchar * Ġstr 1 , Ġconst Ġchar * Ġstr 2 , Ġint Ġn ) Ġ{ Ġint Ġd Ġ= Ġ 0 ; Ġwhile Ġ( n Ġ> Ġ 0 Ġ&& Ġ( d Ġ= Ġto upper (* str 2 ) Ġ- Ġto upper (* str 1 )) Ġ== Ġ 0 Ġ&& Ġ* str 1 ) Ġ{ Ġstr 1 ++; Ġstr 2 ++; Ġn --; Ġ} Ġreturn Ġd ; Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġchar * ĠStr dup ( const Ġchar Ġ* str ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsize _ t Ġlen Ġ= Ġstrlen ( str ) Ġ+ Ġ 1 ; Ġvoid * Ġbuff Ġ= Ġmalloc ( len ); Ġreturn Ġ( char *) memcpy ( buff , Ġ( const Ġvoid *) str , Ġlen ); Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġvoid Ġ ĠStr trim ( char * Ġstr ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġchar * Ġstr _ end Ġ= Ġstr Ġ+ Ġstrlen ( str ); Ġwhile Ġ( str _ end Ġ> Ġstr Ġ&& Ġstr _ end [- 1 ] Ġ== Ġ' Ġ') Ġstr _ end --; Ġ* str _ end Ġ= Ġ 0 ; Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠClear Log () Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfree ( Items [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠItems . clear (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠAdd Log ( const Ġchar * Ġfmt , Ġ...) ĠIM _ PRINTF ARGS ( 2 ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġchar Ġbuf [ 1 0 2 4 ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ list Ġargs ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ start ( args , Ġfmt ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġv snprintf ( buf , ĠIM _ ARRAY SIZE ( buf ), Ġfmt , Ġargs ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuf [ IM _ ARRAY SIZE ( buf )- 1 ] Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ end ( args ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠItems . push _ back ( Str dup ( buf )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( title : ĠString , Ġp Open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġopen Ġby Ġp Open ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 2 0 , Ġ 6 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! begin _( title , Ġp Open )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠAs Ġa Ġspecific Ġfeature Ġguaranteed Ġby Ġthe Ġlibrary , Ġafter Ġcalling Ġbegin () Ġthe Ġlast ĠItem Ġrepresent Ġthe Ġtitle Ġbar . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSo Ġe . g . Ġis Item Hover ed () Ġwill Ġreturn Ġtrue Ġwhen Ġhover ing Ġthe Ġtitle Ġbar . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHere Ġwe Ġcreate Ġa Ġcontext Ġmenu Ġonly Ġavailable Ġfrom Ġthe Ġtitle Ġbar . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Context Item Ġ{ Ġif Ġ( menuItem (" Close ĠConsole ")) Ġopen Ġ= Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" This Ġexample Ġis Ġnot Ġyet Ġimplemented , Ġyou Ġare Ġwelcome Ġto Ġcontribute ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" This Ġexample Ġimplements Ġa Ġconsole Ġwith Ġbasic Ġcolor ing , Ġcompletion Ġand Ġhistory . ĠA Ġmore Ġelabor ate Ġimplementation Ġmay Ġwant Ġto Ġstore Ġentries Ġalong Ġwith Ġextra Ġdata Ġsuch Ġas Ġtimestamp , Ġemitter , Ġetc ."); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Wrapped (" Enter Ġ' HELP ' Ġfor Ġhelp , Ġpress ĠTAB Ġto Ġuse Ġtext Ġcompletion ."); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdisplay Ġitems Ġstarting Ġfrom Ġthe Ġbottom Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Add ĠDummy ĠText ")) Ġ{ ĠAdd Log ("% d Ġsome Ġtext ", ĠItems . Size ); ĠAdd Log (" some Ġmore Ġtext "); ĠAdd Log (" display Ġvery Ġimportant Ġmessage Ġhere !"); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Add ĠDummy ĠError ")) Ġ{ ĠAdd Log ("[ error ] Ġsomething Ġwent Ġwrong "); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Clear ")) Ġ{ ĠClear Log (); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġcopy _ to _ clipboard Ġ= ĠImGui :: Small Button (" Copy "); ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Scroll Ġto Ġbottom ")) ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// static Ġfloat Ġt Ġ= Ġ 0 . 0 f ; Ġif Ġ( ImGui :: Get Time () Ġ- Ġt Ġ> Ġ 0 . 0 2 f ) Ġ{ Ġt Ġ= ĠImGui :: Get Time (); ĠAdd Log (" Sp am Ġ% f ", Ġt ); Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Frame Padding , ĠIm Vec 2 ( 0 , 0 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ĠImGui Text Filter Ġfilter ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . Draw (" Filter Ġ( \" incl ,- ex cl \") Ġ( \" error \") ", Ġ 1 8 0 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġfloat Ġfooter _ height _ to _ reserve Ġ= ĠImGui :: Get Style (). Item Spacing . y Ġ+ ĠImGui :: Get Frame Height With Spacing (); Ġ// Ġ 1 Ġseparator , Ġ 1 Ġinput Ġtext Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Begin Child (" Scrolling Region ", ĠIm Vec 2 ( 0 , Ġ- footer _ height _ to _ reserve ), Ġfalse , ĠImGui Window Flags _ Horizontal Scrollbar ); Ġ// ĠLeave Ġroom Ġfor Ġ 1 Ġseparator Ġ+ Ġ 1 ĠInput Text Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Begin Popup Context Window ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Selectable (" Clear ")) ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End Popup (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġevery Ġline Ġas Ġa Ġseparate Ġentry Ġso Ġwe Ġcan Ġchange Ġtheir Ġcolor Ġor Ġadd Ġcustom Ġwidgets . ĠIf Ġyou Ġonly Ġwant Ġraw Ġtext Ġyou Ġcan Ġuse ĠImGui :: Text Un formatted ( log . begin (), Ġlog . end ()); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNB - Ġif Ġyou Ġhave Ġthousands Ġof Ġentries Ġthis Ġapproach Ġmay Ġbe Ġtoo Ġin efficient Ġand Ġmay Ġrequire Ġuser - side Ġclipping Ġto Ġonly Ġprocess Ġvisible Ġitems . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġseek Ġand Ġdisplay Ġonly Ġthe Ġlines Ġthat Ġare Ġvisible Ġusing Ġthe ĠImGui List Clip per Ġhelper , Ġif Ġyour Ġelements Ġare Ġeven ly Ġsp aced Ġand Ġyou Ġhave Ġche ap Ġrandom Ġaccess Ġto Ġthe Ġelements . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġuse Ġthe Ġclip per Ġwe Ġcould Ġreplace Ġthe Ġ' for Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) ' Ġloop Ġwith : Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ ĠImGui List Clip per Ġclip per ( Items . Size ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġwhile Ġ( clip per . Step ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġclip per . Display Start ; Ġi Ġ< Ġclip per . Display End ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHowever , Ġnote Ġthat Ġyou Ġcan Ġnot Ġuse Ġthis Ġcode Ġas Ġis Ġif Ġa Ġfilter Ġis Ġactive Ġbecause Ġit Ġbreaks Ġthe Ġ' che ap Ġrandom - access ' Ġproperty . ĠWe Ġwould Ġneed Ġrandom - access Ġon Ġthe Ġpost - filtered Ġlist . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġtypical Ġapplication Ġwant ing Ġco arse Ġclipping Ġand Ġfiltering Ġmay Ġwant Ġto Ġpre - compute Ġan Ġarray Ġof Ġindices Ġthat Ġpassed Ġthe Ġfiltering Ġtest , Ġre computing Ġthis Ġarray Ġwhen Ġuser Ġchanges Ġthe Ġfilter , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġapp ending Ġnewly Ġelements Ġas Ġthey Ġare Ġinserted . ĠThis Ġis Ġleft Ġas Ġa Ġtask Ġto Ġthe Ġuser Ġuntil Ġwe Ġcan Ġmanage Ġto Ġimprove Ġthis Ġexample Ġcode ! Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġyour Ġitems Ġare Ġof Ġvariable Ġsize Ġyou Ġmay Ġwant Ġto Ġimplement Ġcode Ġsimilar Ġto Ġwhat ĠImGui List Clip per Ġdoes . ĠOr Ġsplit Ġyour Ġdata Ġinto Ġfixed Ġheight Ġitems Ġto Ġallow Ġrandom - see king Ġinto Ġyour Ġlist . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Item Spacing , ĠIm Vec 2 ( 4 , 1 )); Ġ// ĠT ight en Ġspacing Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy _ to _ clipboard ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Log To Clipboard (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 4 Ġcol _ default _ text Ġ= ĠImGui :: Get Style Color Vec 4 ( ImGui Col _ Text ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġitem Ġ= ĠItems [ i ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! filter . Pass Filter ( item )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 4 Ġcol Ġ= Ġcol _ default _ text ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str str ( item , Ġ"[ error ] ")) Ġcol Ġ= ĠIm Color ( 1 . 0 f , 0 . 4 f , 0 . 4 f , 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( strncmp ( item , Ġ"# Ġ", Ġ 2 ) Ġ== Ġ 0 ) Ġcol Ġ= ĠIm Color ( 1 . 0 f , 0 . 7 8 f , 0 . 5 8 f , 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Color ( ImGui Col _ Text , Ġcol ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Un formatted ( item ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Color (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy _ to _ clipboard ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Log Finish (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Scroll To Bottom ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Set Scroll Here ( 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End Child (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand - line Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġre claim _ focus Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Input Text (" Input ", ĠInput Buf , ĠIM _ ARRAY SIZE ( Input Buf ), ĠImGui Input Text Flags _ Enter Returns True | ImGui Input Text Flags _ Callback Completion | ImGui Input Text Flags _ Callback History , Ġ& Text Edit Callback Stub , Ġ( void *) this )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar * Ġs Ġ= ĠInput Buf ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStr trim ( s ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s [ 0 ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec Command ( s ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrcpy ( s , Ġ""); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre claim _ focus Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAuto - focus Ġon Ġwindow Ġap par ition Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: SetItem Default Focus (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re claim _ focus ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Set Keyboard Focus Here (- 1 ); Ġ// ĠAuto Ġfocus Ġprevious Ġwidget Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End (); ĊĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠExec Command ( const Ġchar * Ġcommand _ line ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("# Ġ% s \ n ", Ġcommand _ line ); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInsert Ġinto Ġhistory . ĠFirst Ġfind Ġmatch Ġand Ġdelete Ġit Ġso Ġit Ġcan Ġbe Ġpushed Ġto Ġthe Ġback . ĠThis Ġisn 't Ġtrying Ġto Ġbe Ġsmart Ġor Ġoptimal . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= ĠHistory . Size - 1 ; Ġi Ġ>= Ġ 0 ; Ġi --) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str icmp ( History [ i ], Ġcommand _ line ) Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree ( History [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory . erase ( History . begin () Ġ+ Ġi ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory . push _ back ( Str dup ( command _ line )); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġcommand Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str icmp ( command _ line , Ġ" CLEAR ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Str icmp ( command _ line , Ġ" HELP ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Commands :"); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠCommands . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("- Ġ% s ", ĠCommands [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Str icmp ( command _ line , Ġ" HISTORY ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġfirst Ġ= ĠHistory . Size Ġ- Ġ 1 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġfirst Ġ> Ġ 0 Ġ? Ġfirst Ġ: Ġ 0 ; Ġi Ġ< ĠHistory . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("% 3 d : Ġ% s \ n ", Ġi , ĠHistory [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Unknown Ġcommand : Ġ'% s '\ n ", Ġcommand _ line ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠText Edit Callback Stub ( ImGui Text Edit Callback Data * Ġdata ) Ġ// ĠIn ĠC ++ 1 1 Ġyou Ġare Ġbetter Ġoff Ġusing Ġlamb das Ġfor Ġthis Ġsort Ġof Ġforwarding Ġcallbacks Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠExample App Console * Ġconsole Ġ= Ġ( Example App Console *) data -> UserData ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconsole -> Input Text Callback ( data ); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġint ĠĠĠĠ ĠInput Text Callback ( ImGui Text Edit Callback Data * Ġdata ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Log (" cursor : Ġ% d , Ġselection : Ġ% d -% d ", Ġdata -> Cursor Pos , Ġdata -> Selection Start , Ġdata -> Selection End ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Ġ( data -> Event Flag ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠImGui Input Text Flags _ Callback Completion : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExample Ġof ĠTEXT ĠCOMP LE TION Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoc ate Ġbeginning Ġof Ġcurrent Ġword Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġword _ end Ġ= Ġdata -> Buf Ġ+ Ġdata -> Cursor Pos ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġword _ start Ġ= Ġword _ end ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( word _ start Ġ> Ġdata -> Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar Ġc Ġ= Ġword _ start [- 1 ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ' Ġ' Ġ|| Ġc Ġ== Ġ'\ t ' Ġ|| Ġc Ġ== Ġ',' Ġ|| Ġc Ġ== Ġ'; ') Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword _ start --; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġa Ġlist Ġof Ġcandidates Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vector < const Ġchar *> Ġcandidates ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠCommands . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str nic mp ( Commands [ i ], Ġword _ start , Ġ( int )( word _ end - word _ start )) Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates . push _ back ( Commands [ i ]); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( candidates . Size Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġmatch Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" No Ġmatch Ġfor Ġ\"% .* s \" !\ n ", Ġ( int )( word _ end - word _ start ), Ġword _ start ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( candidates . Size Ġ== Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSingle Ġmatch . ĠDelete Ġthe Ġbeginning Ġof Ġthe Ġword Ġand Ġreplace Ġit Ġentirely Ġso Ġwe 've Ġgot Ġnice Ġc asing Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Delete Chars (( int )( word _ start - data -> Buf ), Ġ( int )( word _ end - word _ start )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġcandidates [ 0 ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġ" Ġ"); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMultiple Ġmatches . ĠComplete Ġas Ġmuch Ġas Ġwe Ġcan , Ġso Ġinput ing Ġ" C " Ġwill Ġcomplete Ġto Ġ" CL " Ġand Ġdisplay Ġ" CLEAR " Ġand Ġ" CLAS SI FY " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġmatch _ len Ġ= Ġ( int )( word _ end Ġ- Ġword _ start ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(;;) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġc Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġall _ candidates _ matches Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġcandidates . Size Ġ&& Ġall _ candidates _ matches ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġto upper ( candidates [ i ][ match _ len ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( c Ġ== Ġ 0 Ġ|| Ġc Ġ!= Ġto upper ( candidates [ i ][ match _ len ])) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall _ candidates _ matches Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! all _ candidates _ matches ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch _ len ++; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ len Ġ> Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Delete Chars (( int )( word _ start Ġ- Ġdata -> Buf ), Ġ( int )( word _ end - word _ start )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġcandidates [ 0 ], Ġcandidates [ 0 ] Ġ+ Ġmatch _ len ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠList Ġmatches Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Possible Ġmatches :\ n "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġcandidates . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("- Ġ% s \ n ", Ġcandidates [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠImGui Input Text Flags _ Callback History : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExample Ġof ĠHIST ORY Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġint Ġprev _ history _ pos Ġ= ĠHistory Pos ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data -> Event Key Ġ== ĠImGui Key _ Up Arrow ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( History Pos Ġ== Ġ- 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= ĠHistory . Size Ġ- Ġ 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( History Pos Ġ> Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos --; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( data -> Event Key Ġ== ĠImGui Key _ Down Arrow ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( History Pos Ġ!= Ġ- 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ History Pos Ġ>= ĠHistory . Size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġbetter Ġimplementation Ġwould Ġpreserve Ġthe Ġdata Ġon Ġthe Ġcurrent Ġinput Ġline Ġalong Ġwith Ġcursor Ġposition . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev _ history _ pos Ġ!= ĠHistory Pos ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġhistory _ str Ġ= Ġ( History Pos Ġ>= Ġ 0 ) Ġ? ĠHistory [ History Pos ] Ġ: Ġ""; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Delete Chars ( 0 , Ġdata -> Buf Text Len ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( 0 , Ġhistory _ str ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ; Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }