
FoRTh Modoki for B-Free OS
ver 1.3.4 B-Free 1.7.10  Jun. 3, 2000. 
Copyright (C) 1999, 2000  ϲ ұ (Tomohide Naniwa)
naniwa@mechgw.mech.yamaguchi-u.ac.jp

0. ѥ

 B-Free OS ǤΥѥ

1. ɬפ˱ Makefile  ROOT 񤭴Ƥ
2. B-Free OS ѥ뤵Ƥ뤳ȤǧƤOS 򥳥
   뤹ˤ kernel/BTRON/make β make ¹Ԥޤ
3. frtm  make ¹Ԥޤfrtm Ȥ¹ԥե뤬ޤ
4. ¹ԥե POSIX filesystem ˽񤭹ߤޤ񤭹ߤˤ
   kernel/POISX/mkfs/statfs Ѥޤ
5. frtm εư init> ФƤȤ (/frtm) cexec ʤɥե
   ̾ꤷ cexec ¹ԤƤ
6. frtm λˤ quit Ϥޤ

I. Ϥ
Υץ FORTH ϵեȤǤ FORTH Ƹ
ΤǤϤޤ󡥥ѥϻޤ󤬡桼ɤǤ
ɤ˲ᤷޤ

βϵեݡɵˡ˽äƹԤޤif ˤʬ
do-while, for-loop ʤɤΥ롼פΤι¤⤢ޤޤɤ
Ȥ߹碌ƿʥɤ뤳ȤǤޤ

ߤΤȤΤΤߤǤϤ 10 ʿ16 ʿ(Ƭ
0x դ)8 ʿ(Ƭ 0 դ)ǹԤޤ

frtm.h ǳƼ凉åΥƤޤ줾졤

#define STMAX 100    ; ͷ׻ѥå
#define DICMAX 20    ; 桼ɤκ
#define CSMAX 200    ; 桼ɤΤεΰ
#define RSMAX 100    ; 桼ɼ¹ѥå
#define SSMAX 80     ; 롼פʤɤѥå
#define MAX_NAME 8   ; 桼̾κʸ
#define LINE 100     ; Ԥκʸ

ȤʤäƤޤŬѹƤ

II. ܵǽ
 ѥ
.	10 ɽ
.h	16 ɽ
.o	8 ɽ
cr	
sp	
+	
-	
*	
/	
%	;
=	Ʊ
<	꾮
<=	ʲ
>	礭
>=	ʾ
!	ȿž
1+	1 û
1-	1 
0=	0 Ʊ
abs	
max	
min	Ǿ
dup	ʣ
swap	
drop	
over	åΣܤʣ
rot	åξ̣Ĥžܤȥåפ
rotr	åξ̣Ĥžȥåפܤ
ndup	å n ܤʣ
nrot	åžn ܤȥåפ
nrotr	åžȥåפ n ܤ
ndrop	åξ n Ĥ
copy	åξ n Ĥʣ
SP	ƤӽФΥåο򥹥åΥȥåפɲ
minus	Ѵ
spaces  ʣĤζ
esc	ץ(0x1B)ν
help	ؿ̾
quit	λ

 ʸɽ
(Hello_World) echo cr
åˤ
    '0dlr' 'oW_o' 'lleH'
˥ѥåʸ롥echo ʸ 0 ޤǽ
ɽ롥

ʸ \ (Хåå)ˤ륳ȥ롦ɤΥ
ǽǤ롥Ѳǽʸ '\n'()'\t'(ʿ), '\b'(Х
ڡ) '\ddd' (ddd ϣʿ) Ǥ롥ʿʸ
ϺǾ̤ο 0 Ǥ뤳ȤꤷƤ롥ʳʸϤΤ
ʸɲä롥

III. ץ๽¤
 ʬ
<cond> if <block 1> endif
<cond> if <block 1> else <block 2> endif


<cond>  0 ʳʤ <block 1> ¹ԡ
<cond>  0 ʤ <block 2> ¹ԡ



else ֥åʣ񤱤롥


0 if 1 else 2 endif . cr

 do 롼
do <block 1> <cond> while


<cond>  0 Ǥнλ0 ʳʤ do äƷ֤


1 do dup . cr 1 + dup 5 < while drop
1 do dup . sp 1 do dup . sp 1 + dup 5 < while cr drop 1 + dup 4 < while drop

 for 롼
<n1> <n2> for <block> loop
<n1> <n2> for <block> <n3> +loop


<block> λ n2 + 1(ޤn3) ¹Ԥn1 꾮 for 
Ʒ֤

I ꥿󥹥å n2 򥹥åɲä롥


n1, n2 οȤ롥


5 0 for I . cr loop
10 0 for I . sp 5 1 for I . sp loop cr 2 +loop

 ɤ
: name <block> ;


name ĥɤ롥


do  for Υ롼פǤϥɤϿϤǤʤ

桼Ͽ줿Τ˸뤿ᡤƵǽˤʤ
Ƥ롥ޤɤƤŤɤϤΤޤ޻Ĥ롥

 
ʿ
: ave + 2 / ;
10 28 ave . cr

 [fact(1) = 1, fact(n) = n*fact(n-1)]
: facti 1 swap 1+ 1 for I * loop ;
: fact dup 1 = if else dup 1- fact * endif ;
10 facti . cr
10 fact . cr

եܥʥå [fib(0) = 0, fib(1) = 1, fib(n) = fib(n-1) + fib(n-2)]
: fib dup 0= if else dup 1 = if else dup 1- fib swap 2 - fib + endif endif ;
7 fib . cr
: fibi dup 0= if else 0 1 rot 1 for swap over + loop swap drop endif ;
30 fibi . cr
20 0 for I fibi . sp loop cr

ϥΥ
: move1 (Move disk ) echo . swap  ( from ) echo . ( to ) echo . cr ;
: hanoi dup 1 = if move1 else
    3 ndup 3 ndup + 6 - minus 4 ndup swap 3 ndup 1- hanoi
    3 ndup 3 ndup 3 ndup move1
    1- rotr swap over + 6 - minus swap rot hanoi
  endif ;
1 2 2 hanoi
1 2 4 hanoi

N Queens
: N 2 * 3 + ;
: disp dup N ndup 0 for 
    dup N ndup 0 for over I = 
      if (Q ) echo else (. ) echo endif 
    loop cr drop drop 
  loop drop ;
: check over 0 for 
    3 ndup 6 ndup = if drop 0 else 
        3 ndup 6 ndup - abs 3 ndup 6 ndup - = if drop 0 else 1 = endif 
    endif
    5 nrot 5 nrot drop drop 
  loop rotr drop drop ;
: nq dup N ndup 0 for 
    I over 1+ dup N 1- copy 1 check if 
      dup N ndup over 1+ = if dup N copy disp cr else nq endif 
    endif
  drop drop loop ;
: queens dup 0 for I 0 nq drop drop loop drop ;

4 queens

puzzle ȤɤȤäƾ嵭ΥϥΥ N Queens ѥ
ɤ桼ɲä뤳ȤǤޤ

 񥳥ޥ
help  ƥɡ桼ɤΰɽ

forget <name>
<name> Ȥ̾ĥɰʹߤ˥桼ɤõ롥

def <name>
<name> Ȥ̾ĥɤ򡤺ɾǽʷɽ롥

 ɤõ
ɤϥƥ༭񡤥桼νõ롥桼Ͽ
Ͽ줿Τ鸡롥

IV. ե
UNIX ǥѥ뤷 X11 ĶǡB-Free ǥѥ뤷
 vga ⡼ɤǤΥեѤǤޤ

 
gm		ե⡼ɤ
tm		ƥȡ⡼ɤ
x y moveto	(x, y) ذư
x y lineto	֤߰ (x, y) ޤľ
x y rmoveto	֤߰ (x, y) ư
x y rlineto	֤߰ (x, y) ľ
x y w h rect	ΰ
x y w h rectf	ΰɤ٤
x y point	
x y w h ellips	ʱߤ
x y w h ellipsf	ʱߤɤ٤
c setcolor	(0:  пֻ粫 15: )
c setbgc	ʸطʿλ
n setfont	եȤλ (0: a14, 1: 7x14bold)
x y s drawstr	(x, y) ʸ s ɽ(طʤϤΤޤ)
x y s drawistr	(x, y) ʸ s ɽ(طʤɤ٤)
cls		̾õ

 
 Ѥʤΰɤ٤
: boxes 16 0 for I setcolor 10 20 I * + dup 100 100 rectf loop ;
gm boxes
tm

Ƶ޷(Koch )
: pre 5 copy drop ;
: genx 3 ndup 6 ndup - * minus 100 / swap 4 ndup 7 ndup - * 100 / + 5 ndup +
  5 nrotr 4 ndrop ;
: geny swap 3 ndup 6 ndup - * 100 / swap 4 ndup 7 ndup - * 100 / + 4 ndup +
  5 nrotr 4 ndrop ;
: gen 6 copy genx 7 nrotr geny ;
: keep 7 nrotr 7 nrotr pre ;
: post 9 nrot 9 nrot 4 nrot 4 nrot 5 ndup 1- ;
: line moveto lineto ;
: koch dup 0= if drop line else 
    pre 0 0 gen keep 33 0 gen post koch
    pre 33 0 gen keep 50 -28 gen post koch
    pre 50 -28 gen keep 66 0 gen post koch
    pre 66 0 gen keep 100 0 gen post koch
    5 ndrop
  endif ;
gm 50 250 600 250 4 koch
tm

: kochs 10 setcolor  89 440 551 440 4 koch
        11 setcolor 551 440 320  40 4 koch
        12 setcolor 320  40  89 440 4 koch ;
gm kochs
tm

graphics ȤɤȤäơboxes  Koch ɤ桼
ɲä뤳ȤǤޤ

V. B-Free OS ѥ
 ե

open	եΥץ󡥥ե̾ȥ⡼ɤ򥹥å롥
	ˡ: (/test.txt) 10 open . cr
	⡼ɤ 2 (O_RDWR), 8 (O_CREAT)  or ǻꡥ0  O_RDONLY
write	եؤʸν񤭹ߡʸȥե ID 򥹥å
	롥
	ˡ: (Hello World) 3 write
close	եΥե ID 򥹥å롥
	ˡ: 3 close
dir	ǥ쥯ȥΰɽǥ쥯ȥ򥹥å롥
	ˡ: (/) dir
cat	եƤɽե̾򥹥å롥
	ˡ: (/test.txt) cat
unlink	եκե̾򥹥å롥
	ˡ: (/test.txt) unlink
mkdir	ǥ쥯ȥκǥ쥯ȥ̾򥹥å롥
	ˡ: (/test1) mkdir
rmdir	ǥ쥯ȥκǥ쥯ȥ̾򥹥å롥
	ˡ: (/test1) rmdir
chdir	ǥ쥯ȥΰưǥ쥯ȥ̾򥹥å롥
	ˡ: (/test1) chdir
load	ե뤫Υɤɤ߹ߡե̾򥹥å롥
	ˡ: (/mandel.bf) load

ե ID  0, 1, 2 Ϥ줾ɸϡɸϡɸ२顼Ϥ
ͽ󤵤Ƥޤ(Hello World) 1 write Ȥ뤳Ȥǡ̤ؤνϤ
ǽǤ

 ץμ¹

exec	ץεưե̾򥹥å롥
	ˡ: (/frtm) exec
	: exec 塤ƥץϻҥץνλԤޤ

 ɤɽgm ǥեå⡼ɤ˰ܹԸ˼¹ԡ

kfopen	ʴ˥եȥեΥץե̾򥹥å롥
	ˡ: (/k14.bfb) kfopen
kfclose	ʴ˥եȥեΥ
	ˡ: kfclose
drawkch	ɽ֤ x, y ɸȴɤ򥹥å롥
	ɤ 7bit JIS ɤǻꡥ
	ˡ: 10 10 0x4f32 drawkch

 ɥط

multi	եå⡼ɤ˰ܹԤ 2 Υɥɽ줾
	 frtm ư롥F1 ǥɥưǤ롥
	frtm ƽλȥƥȥ⡼ɤ롥
	: multi ѤƥɥɽƤȤ winmod ˤ
	      ɥξ֤ѹϹԤʤʤǤޤ tm ǥƥ
	      ȥ⡼ɤȤϤǤޤޤΤǡѤʤǤ
	      

winmod	gm ǥեå⡼ɤ˰ܹԤΥɥΥ⡼ɤѹ
	롥⡼ɤ򥹥å롥
	0 80x25 Υɥѡ
	1 80x12 Υɥɽ¦Υɥѡ
	2 80x12 Υɥɽ¦Υɥѡ
	ɥ֤ΰư F1 Ѳǽ
	ˡ: 1 winmod
	: multi ȤäʣΥɥѤƤˤ
              winmod ϻѤʤ

 ǥХåѥ

tasklist  ITRON ΰɽƥȥ⡼ɤǤΤư
	  ˡ: tasklist
pmemstat  ʪ꡼Ѿɽƥȥ⡼ɤǤΤư	
	  ˡ: pmemstat
prtflistPOSIX manager  malloc ǴƤ free list ɽ
	  ƥȥ⡼ɤǤΤư
	  ˡ: prtflist

VI. ɤˤĤơ
С 1.3.0 ʹߤ FoRTh Modoki (frtm)  GNU General Public
License ˽ΤȤޤ

ФϤߤˤʤޤ

---
(putprop 'ϲ֡ұ
    'affiliation  '(ر ظ Ķ칶)
    'e-mail	  '(naniwa@scr.mech.yamaguchi-u.ac.jp)
    'URL  '(http://www.scr.mech.yamaguchi-u.ac.jp/staff/naniwa.html))
