diff --git a/presentation.fs b/presentation.fs index 5820c05..914978f 100755 --- a/presentation.fs +++ b/presentation.fs @@ -2,12 +2,15 @@ \ here-allokation wird als fifo verwendet. : copy ( addrdst addrsrc len -- addrdstend ) over ( dst src len src ) + swap ( dst end src ) - do ( dst+ ) + +do ( dst+ ) i ( dst+ src+ ) c@ ( dst+ chr ) over ( dst+ chr dst+ ) c! ( dst+ ) 1+ loop ; +\ 2-rot ist bei gforth anscheinend nicht definiert +: 2-rot { a1 a2 b1 b2 c1 c2 } c1 c2 a1 a2 b1 b2 ; + : term-size form ; : term-height ( -- i ) term-size drop ; : term-width ( -- i ) term-size nip ; @@ -96,7 +99,10 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein : escape ( -- addr len ) s\" \e" ; : csi ( -- addr len ) s\" \e[" ; : sgr ( u -- ) csi type 0 0 d.r 109 ( m ) emit ; -: beep 7 emit s" *beep* " type ; +: beep + 0 term-height 2 - at-xy + 7 emit s" *beep* not" type +; \ Es folgen ein paar syntaktische Textauszeichnungen. : {i} ( addr -- addr ) 7 sgr ; @@ -120,9 +126,9 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein : {/bc} ( addr -- addr ) 49 sgr ; : ( -- ) ['] {/bc} , ; : {br} ( addr -- addr ) cr ptype-reset ; -:
( -- ) ['] {br} , ; +:
( -- , xt-{br} ) ['] {br} , ; \ Es folgen ein paar blockorientierte Kennzeichnungen. -: {h} ( addr -- addr ) +: {h} ( addr , len -- addr ) cr term-width over @ - 2 / \ addr width-twidth/2 dup ptype-lenl ! @@ -130,8 +136,8 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein cell+ {b} ; \ header -: ( -- addr u0 ) ['] {h} , here 0 , 0 ; -: {/h} ( addr -- addr ) +: ( -- addr 0 , xt-{h} 0 ) ['] {h} , here 0 , 0 ; +: {/h} ( addr , len -- addr1 ) {/b} cr term-width over @ - 2 / \ addr width-twidth/2 @@ -141,19 +147,19 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein cr cell+ ; -: ( addr len -- ) ['] {/h} , dup , swap ! ; +: ( addr len -- , xt-{/h} len0 ) ['] {/h} , dup , swap ! ; : {p} ( addr -- addr ) cr ptype-reset cell+ ; \ paragraph -:

( -- addr u0 ) ['] {p} , here 0 , 0 ; +:

( -- addr u0 , xt-{p} 0 ) ['] {p} , here 0 , 0 ; : {/p} ( addr -- addr ) cr ; -:

( addr len -- ) ['] {/p} , swap ! ; +:

( addr len -- , xt-{/p} ) ['] {/p} , swap ! ; : {li} ( addr -- addr ) s\" * " type 4 ptype-lenl ! cell+ ; -:
  • ( -- addr u0 ) ['] {li} , here 0 , 0 ; +:
  • ( -- addr u0 , xt-{li} 0 ) ['] {li} , here 0 , 0 ; : {/li} ( addr -- addr ) cr ; -:
  • ( addr len -- ) ['] {/li} , swap ! ; +: ( addr len -- , xt-{/li} ) ['] {/li} , swap ! ; : {np} ( -- ) 0 sgr \ Alle Bildschirmeigenschaften zuruecksetzen @@ -163,8 +169,11 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein \ 30 sgr 40 sgr 0 term-height 2 - at-xy ; -: ( -- addr ) \ Wir legen jede Anfangsadresse einer Seite auf den Stack (Achtung, in umgekehrter Reihenfolge) - ['] {/np} , here ['] {np} , +: ( -- addr , xt-{/np} xt-{np} ) + \ Wir legen jede Anfangsadresse einer Seite auf den Stack (Achtung, in umgekehrter Reihenfolge) + ['] {/np} , + here + ['] {np} , ; : {!!} ( addr -- addr+2 ) @@ -176,7 +185,7 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein ptype \ addr cell+ ; -: !! ( len0 addr1 len1 -- len !! '{!!} addr1 len1 ) +: !! ( len0 addr1 len1 -- len , xt-{!!} addr1 len1 ) ['] {!!} , dup \ len0 addr1 len1 len1 rot , , \ len0 len1 len1 addr1 -> len0 len1 @@ -202,8 +211,8 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein 2dup <= \ faddr laddr paddr u 2over drop rot tuck > rot \ faddr laddr paddr u u - if drop cell - -1 \ faddr laddr paddr-1 -1 - else if cell+ -1 \ faddr laddr paddr+1 -1 + if drop cell - 1 \ faddr laddr paddr-1 -1 \ paddr-overflow + else if cell+ -1 \ faddr laddr paddr+1 -1 \ paddr-underflow else 0 \ faddr laddr paddr 0 then then ; @@ -218,29 +227,18 @@ ptype-reset \ ptype-lenl sollte von Anfang an 0 sein repeat 2drop ; -: showpage ( faddr laddr paddr -- faddr laddr paddr 0 ) - validpage? +: showpage ( faddr laddr paddr -- faddr laddr paddr0 0 ) + validpage? 0 tuck 2-rot drop \ i 0 faddr laddr paddr0 + dup showpage' 0 2rot drop \ faddr laddr paddr0 0 i if beep then - dup showpage' 0 -; -: n ( faddr laddr paddr 0 [u] -- faddr laddr paddr 0 ) - page_steps cells - \ faddr laddr paddr - showpage -; -: g ( faddr laddr paddr 0 u -- faddr laddr paddr 0 ) - cells nip nip over swap - - showpage -; -: p ( faddr laddr paddr 0 [u] -- faddr laddr paddr 0 ) - page_steps cells + - showpage -; -: u ( faddr laddr paddr X -- faddr laddr paddr 0 ) - drop showpage ; +: n ( faddr laddr paddr 0 [u] -- faddr laddr paddr 0 ) page_steps cells - showpage ; +: g ( faddr laddr paddr 0 u -- faddr laddr paddr 0 ) cells nip nip over swap - showpage ; +: p ( faddr laddr paddr 0 [u] -- faddr laddr paddr 0 ) page_steps cells + showpage ; +: u ( faddr laddr paddr X -- faddr laddr paddr 0 ) drop showpage ; : q bye ; -: ( -- addr0 0 addr1 !! '{np} ) here 0 here ['] {np} , ; +: ( -- addr0 0 addr1 , xt-{np} ) here 0 here ['] {np} , ; : ( 0 -- faddr laddr paddr 0 !! endaddr 0 0 0 0 <...addr> ) here \ 0 faddr diff --git a/presentation.p.fs b/presentation.p.fs index f212cb0..8c17674 100644 --- a/presentation.p.fs +++ b/presentation.p.fs @@ -60,8 +60,8 @@ !" Und Farben"
    -
  • !" Hintergrundfarbe: " !" 3 "
  • -
  • !" Vordergrundfarbe: " !" 5 "
  • +
  • !" Hintergrundfarbe: " s\" 3 !\" text\" " !! !" : " 3 !\" text"
  • +
  • !" Vordergrundfarbe: " s\" 5 !\" text\" " !! !" : " 5 !\" text"
  • !" 8 Farben sind moeglich:"

    farbendemo