Exemples

Place restante

( Source : Megahector volume 3, page 56 et 57  )
( Auteur : Jacques Moulinie                    )
: FREE FIRST HERE - U.
  ." OCTETS LIBRES" CR ;

FREE ( - ) affiche un message indiquant le nombre d'octets restats pour le dictionnaire.

Pour cela, la différence entre FIRST et HERE est calculée, puis affichée en décimal suivi d'un message.

Ce n'est pas l'intégralité de la place restante, puisqu'il est possible, si on ne les utilise pas, d'utiliser la mémoire des buffers, ainsi que de la pile d'images.

Sauver des mots

( Source : Megahector volume 1, page 45 )
( Auteur : la rédaction de Megahector   )

: TOL
  [  HEX   LATEST PFA DUP CFA !
 00 C,   0800 ,   0000 ,   0000 ,
 FE C,   0800 ,   0001 ,   0000 ,
 FE C,   C000 ,   3900 ,   0000 ,
 FB C,   1000 ,   0001 ,   FEE4 ,
 FB C,   1800 ,   0001 ,   FEE5 ,
 FB C,   C000 ,   0000 ,   C000 ,
 FE C,   0808 ,   0001 ,   0000 ,
 FF C,   6000 ,   0000 ,   6000 ,
 FF C,   FF42 ,   0090 ,   FF42 ,
 FD C,   0000 ,   0000 ,   0000 ,
  ]    ;
: EXTOL
  [  HEX   LATEST PFA DUP CFA !
 C5F5 ,   E5DD ,   21DD ,  ' TOL ,
 013E ,   28CD ,   DD03 ,   C1E1 ,
 FBF1 ,   E9DD ,
  ] ;
: MM HOME FF8E FFD0 @ ! 30A9 FF86 !
     30A9 EXECUTE  QUIT ;
: SAUVE   [ HEX ]
     DUP 0= IF DROP C000 1 C000 THEN
     ' TOL 24 + !   ' TOL 26 + !
     ' TOL 28 + !
     [COMPILE]  '
     DUP  LFA  FFD0 ! NFA DUP DUP
     ' TOL 32 + !   ' TOL 36 + !
     HERE - ABS 29 +  ' TOL 34 + !
     [COMPILE] ' CFA
     DUP 306C = IF DROP 30A9 THEN
     ' MM NFA 21 + !
     ' MM NFA HERE 29 CMOVE
     LATEST  HERE 2DUP 3 + !
     HERE FF9C !
     HERE 5 + FF86 !   HERE 29 + DP !
     FF42 @ 3F18 FF42 !
     FF94 @ 3F26 FF94 !
     EXTOL
     FF94 ! FF42 !
     DP ! FF9C ! 30A9 FF86 !     ;

Demo Graph

Note : les écrans sont notés et séparés, cependant, le code est écrit sous une forme plus lisible.

Pour être utilisé, le code devra être re-tassé pour que chaque page puisse entrer dans un screen.

( Source : HECTORIEN 1, page 35 et 36 )
( Auteur : Alain MARC )

( SCREEN 1 )

1 VARIABLE C
: COL 0 1 3 4 COLOR ;
: TSC
    C @ 3 > IF
        1 DUP C ! INK
    ELSE
        C @ INK
    THEN ;
: AA
    CLS
    0 0 FROM
    234 0 DO
        228 0 DO
            TSC
            J 10 + I TO
            J 10 + I 10 + TO
            J 20 + I 10 + TO
            1 C +!
        10 +LOOP
    10 +LOOP
    KEY DROP ;
: BB
    CLS
    0 228 FROM
    234 0 DO
        0 228 DO
            TSC
            J 10 + I TO
            J 10 + I 10 + TO
            J 20 + I 10 + TO
            1 C +!
        -10 +LOOP
    10 +LOOP
    KEY DROP ;
: C?
    C @ 3 > IF
        0 DUP C ! INK
    ELSE
        C @ INK
    THEN ;
: EE
    CLS
    3 C !
    237 6 DO
        8 228 DO
            C?
            J I J 10 + I 10 - BOX
            1 C +!
        -10 +LOOP
    10 +LOOP
    KEY DROP CLS ;
: KD
    KEY DROP CLS ;

( SCREEN 2 )

32767 VARIABLE SINTT
1 VARIABLE FLAGC
0 VARIABLE TABLE 182 ALLOT

0 572 01144 01715 02286 02856 03423
03993 04560 05126 05690 06252 06613
07371 07927 08481 09032 09580 10126
10668 11207 11743 12275 12803 13328
13848 14364 14876 15383 15886 16384
16876 17364 17846 18323 18794 19260
19720 20173 20621 21062 21497 21925
22347 22762 23170 23571 23964 24351
24730 25101 25465 25821 26169 26509
26841 27165 27481 27788 28087 28377
28659 28932 29196 29451 29697 29934
30162 30381 30591 30791 30982 31163
31335 31490 31650 31794 31927 32051
32165 32269 32364 32448 32523 32587
32642 32687 32722 32747 32762 32757
: OUBLIE
    0 0
    TABLE 182 + TABLE DO
        ROT DUP I ! ( place la valeur de la pile dans TABLE )
        0 D+        ( maintient une somme de contrôle )
        ?STACK      ( vérifie la pile )
    2 +LOOP
    + 6765 + IF     ( vérifie la somme de contrôle )
        ." ERREUR" QUIT
    THEN ;
OUBLIE FORGET OUBLIE

( SCREEN 3 )

90 VARIABLE THETA
0 VARIABLE COSTT
115 VARIABLE XTORT
115 VARIABLE YTORT
: COS
    180 - ABS
    DUP 90 IF
        180 - ABS 2* TABLE + @
    ELSE
        2* TABLE + @ MINUS
    THEN ;
: SIN 180 -
    DUP 0< IF
        90 + ABS 2* TABLE + @
    ELSE
        90 - ABS 2* TABLE + @ MINUS
    THEN ;
: 360MOD
    BEGIN
        DUP 0<
    WHILE
        360 +
    REPEAT
    BEGIN
        DUP 359 >
    WHILE
        360 -
    REPEAT ;
: XY
    YTORT !
    XTORT ! ;
: CAP
    360MOD DUP THETA !
    DUP
    COS 63 100 */ COSTT !
    SIN SINTT ! ;
: AV
    XTORT @ YTORT @ FROM
    DUP COSTT @
    32767 */ XTORT +!
    XTORT @ SWAP SINTT @
    32767 */ YTORT +!
    YTORT @ FLAGC @
    IF
        TO
    ELSE
        2DROP
    THEN ;
: DEP CLS 121 115 XY 90 CAP ;
: RC MINUS RV ;

( SCREEN 4 )

37 VARIABLE FOIS
: PY1
    SWAP FOIS @ 0 DO
        2DUP AV DR
    LOOP
    2DROP ;
: PY2
    SWAP FOIS @ 0 DO
        2DUP RC GA
    LOOP
    2DROP ;
: CE1 CAP 10 10 PY1 ;
: II 121 85 XY BIG 217 INK LITTLE
    180 CE1 160 CE1 140 CE1 120 CE1 100 CE1
    80 CE1 60 CE1 40 CE1 20 CE1 0 CE1
    340 CE1 320 CE1 300 CE1 280 CE1 260 CE1
    240 CE1 220 CE1 200 CE1 KD ;
: CE2 CAP 5 10 PY1 ;
: CE3 CAP 5 10 PY2 ;
: FA 180 CE2 150 CE2 120 CE2 90 CE2 60 CE2
    30 CE2 0 CE2 330 CE2 300 CE2 270 CE2
    240 CE2 210 CE2 ;
: FR 180 CE3 210 CE3 240 CE3 270 CE3
    300 CE3 330 CE3 0 CE3 30 CE3 60 CE3
    90 CE3 120 CE3 150 CE3 ;
: B217 BIG 217 INK LITTLE ;
: B219 BIG 219 INK LITTLE ;

( SCREEN 5 )

: JJ 4 0 DO
    I 0= IF
        B217 98 150 XY FA
    ELSE
        I 1 = IF
            B219 145 150 XY FR
        ELSE
            U 2 = IF
                B217 149 72 XY FA
            ELSE
                B219 98 72 XY FR
            THEN
        THEN
    THEN
    LOOP KD ;
: CE4 CAP 10 10 PY2 ;
: KK
    DEP 45 CE1 90 CE4 135 CE1 180 CE4
    225 CE1 270 CE4 315 CE1 0 CE4
    56 107 XY 90 CAP 20 10 PY1 40 FOIS !
    77 123 XY 90 CAP 13 9 PY2 21 FOIS !
    101 112 XY 90 CAP 12 17 PY1 37 FOIS ! KD ;
: LL
    3 INK CLS 201 50 DO
        I 0 I 200 LINE
    10 +LOOP
    230 0 DO
        45 I 205 1 LINE
    10 +LOOP
    121 115 XY 90 CAP 1
    INK 45 CE1 90 CE4 135 CE1 180 CE4
    225 CE1 270 CE4 315 CE1 0 CE4
    56 107 XY 90 CAP 20 10 PY1 40 FOIS !
    77 123 XY 90 CAP 12 17 PY1 37 FOIS !
    KD ;

( SCREEN 6 )

(?TODO?) À continuer