All pastes #612972 Raw Edit

white_TigR

public text v1 · immutable
·published 2007-07-10 18:58 UTC
rendered paste body
' EMIT VALUE 'EMIT
' PRINT VALUE 'PRINT

: Flower
 FDUP 0.5 F- F>S S>F F-
 FDUP 1.0 F= IF
  1.0 F-
 THEN
;

: FMOD // FS: x y --> x(mod)y
 10000.0 F* F>S
 10000.0 F* F>S
 SWAP MOD S>F
 10000.0 F/
;

// : Flower
// 1.0 FMOD
// ;

: RGB-> // Color --> R G B
 65536 /MOD
 256 /MOD
 ROT ROT SWAP
;

: Gradient // Percent Color1 Color2 --> Color
           // Переход от цвета1 к цвету2
           // Percent - 0..100
 SWAP RGB->
 3 PICK RGB-> // DS: Percent Color2 R1 G1 B1 R2 G2 B2
 3 PICK - 7 PICK * 100 / 3 PICK + 3 XCHG DROP // DS: Percent Color2 R1 G1 Bnew R2 G2
 3 PICK - 6 PICK * 100 / 3 PICK + 3 XCHG DROP // DS: Percent Color2 R1 Gnew Bnew R2
 3 PICK - 5 PICK * 100 / 3 PICK + 3 XCHG DROP // DS: Percent Color2 Rnew Gnew Bnew
 RGB
 2 XCHG DROP DROP
;

32 VALUE fontH
16 VALUE fontW

: TOfontWH // w h -->
 TO fontH
 TO fontW
;

: +X // n -->
 WHERETEXTXY ROT ROT + SWAP TEXTXY
;

: +Y // n -->
 WHERETEXTXY ROT + TEXTXY
;

: GetBit // addr bit(0..7) --> 0|1
 1 SWAP 1+ 0 DO 2* LOOP 2/
 SWAP C@ AND IF 1 ELSE 0 THEN
;

: GetSymbolBit // n x(0..7) y(0..15) --> 0|1
 2 PICK 16 * + SYMBOLS + SWAP
 8 SWAP - GetBit
 SWAP DROP
;

: BitColor // 0|1 --> color
 IF GETCOLOR ELSE GETBGCOLOR THEN
;

: X>F // DS: x --> FS: x
 S>F fontW S>F F/ 8.0  F*
;

: Y>F // DS: x --> FS: x
 S>F fontH S>F F/ 16.0 F*
;

: XY>fXY // x y --> fX fY
 SWAP X>F F>S
 SWAP Y>F F>S
;

: NORMAL // n x y --> color
 XY>fXY GetSymbolBit BitColor
;

: SMOOTH // n x y --> color
 OVER OVER XY>fXY // n x y fX fY
 4 PICK 4 PICK 4 PICK NORMAL // n x y fX fY color

 // Размытие по оси X

 4 PICK X>F Flower 100.0 F* F>S

 DUP 2 PICK
 8 PICK 6 PICK 1- 0 7 RANGE 6 PICK GetSymbolBit BitColor
 Gradient

 SWAP 100 SWAP - 2 PICK
 8 PICK 6 PICK 1+ 0 7 RANGE 6 PICK GetSymbolBit BitColor
 Gradient

 50 ROT ROT Gradient

 // Размытие по оси Y

 4 PICK X>F Flower 100.0 F* F>S

 DUP 3 PICK
 9 PICK 7 PICK 7 PICK 1- 0 15 RANGE GetSymbolBit BitColor
 Gradient

 SWAP 100 SWAP - 3 PICK
 9 PICK 7 PICK 7 PICK 1+ 0 15 RANGE GetSymbolBit BitColor
 Gradient

 50 ROT ROT Gradient

 50 ROT ROT Gradient

 6 XCHG
 6 0 DO DROP LOOP
;

: sEMIT // n -->
 fontH 16 = fontW 8 = AND IF
  EMIT
 ELSE
  fontH 0 DO
   fontW 0 DO
    DUP I J
    NORMAL
    WHERETEXTXY ROT PIXEL
    1 +X
   LOOP
   0 fontW - +X
   1 +Y
  LOOP
  fontW +X
  0 fontH - +Y
  DROP
 THEN
;

: strLen // p --> len
 0
 OVER C@ IF
  BEGIN 1+ OVER OVER + C@ 0 = UNTIL
 THEN
 SWAP DROP
;

: PRINT // p -->
 DUP strLen
 0 DO
  DUP I + C@ sEMIT
 LOOP
 DROP
;

: zeros
 51 2 DO
  I 16 = IF RED ELSE GREEN THEN SETCOLOR
  I 2/ I TOfontWH
  48 sEMIT
 LOOP
;

: test
 CLS

 0 0 GOTOXY zeros

 0 50 TEXTXY
 150 400 TOfontWH " Forth" PRINT
;