PiF 7 | <terug> |
0 value hierIn het woord .VAKJE vervangen we de eerste SPACE door deze code:
hier over = if [char] > else bl then emitof
hier over = [char] > and bl or emitAls de cursor naar het vakje wijst wordt er een ">" afgedrukt in plaats van een spatie.
: .vakje ( nr -- ) hier over = [char] > and bl or emit \ Markeer cursorvakje. (sdk + c@ >symbool emit space ;
: SU ( -- ) \ Het hoofdwoord page begin 0 0 at-xy .sdk cr cr key 27 over <> \ Stop met [Esc] while doen drop repeat drop ;Als je forth geen AT-XY kent zou je 0 0 AT-XY door PAGE kunnen vervangen of door het afdrukken van een escape-code (ESC H of ...) die door de terminal begrepen wordt.
: doen ( key -- key ) [char] [ over = if hier west to hier exit then [char] ] over = if hier oost to hier exit then [char] = over = if hier noord to hier exit then [char] ' over = if hier zuid to hier exit then dup invullen? ?exit then ... \ Andere opties ;De woorden WEST OOST NOORD ZUID en INVULLEN? moeten nog gemaakt worden. Uit dit voorbeeld kun je wel opmaken wat ze moeten doen. Ik heb de toetsen [ ] = en ' gekozen voor de vier richtingen omdat ze (op mijn toetsenbord) in deze posities ten opzichte van elkaar staan:
= noord [ ] west oost ' zuidAls je forth het mogelijk maakt, kun je beter de vier pijltjestoetsen gebruiken. Met KEY . zijn hun toetscodes te vinden.
Als voorbeeld komt hier de code van WEST
: west ( vaknr1 -- vaknr2 ) dup z mod 0= \ Vooraan een regel? if z + then \ Dan eerst z bijtellen. 1- ;Het kan ook zo:
: west ( vaknr1 -- vaknr2 ) z 2dup mod 0= and + \ z of 0 bijtellen. 1- ;De cursor gaat een vakje naar links. Stond hij op het begin van een regel? Dan springt hij naar het eind van de regel. WEST blijft altijd op dezelfde regel.
Maak de woorden OOST, NOORD en ZUID voor de cursorbewegingen,
van elk 2 versies: eenmaal met IF en eenmaal zonder IF.
Hier vind je sudo2.f, de file met de code tot nu toe.
Groeten,
| <terug> |