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