// 2011.07.10 # Doj
// Модуль для написания текстов в последнем созданном лабиринте

include" level.de"

LEVEL

variable *last-font

level TEMP
lab 
    
    
    
    
    
\lab
last-lab-ptr @ value zero-letter

: font create here *last-font ! 256 cells allot 
       256 begin dup 0> while 
         1- zero-letter over *last-font @ table[]! 
       repeat drop ;

: letter ( "c") last-lab-ptr @ char *last-font @ table[]! ;

: .lab-x @ ;
: .lab-y cell+ @ ;
: .lab-maze 2 cells + ;

// рисует символ c шрифтом f в позиции xy, смещая позицию до mn
variable *font
variable *letter
variable *x
variable *y
variable *char
: draw-letter ( xyfc-mnf) 
  swap dup *font ! table[]@ *letter ! *y ! *x !
  *letter @ .lab-x begin dup 0> while 1-
    *letter @ .lab-y begin dup 0> while 1-
      2dup *letter @ .lab-x * + cells *letter @ .lab-maze + @ *char !
      over *x @ + over *y @ + *char @ rrot last-lab[]!
    repeat drop
  repeat drop
  *x @ *letter @ .lab-x + *y @ *font @
;

// рисует строку s шрифтом f, начиная с ячейки (x,y)
: text ( xyf B: s) begin str# 0> while 0 str[]@ draw-letter 0 1 str-del repeat bdrop ;
