\ List
: List ( size -<name>- )
create
dup
4 +
here
swap
allocate
if
drop 0
then
dup rot ! \ 紀錄 List空間位置
dup >R ! \ List第一個空間位置放 List_size
0 r> 4 + !
does>
;
: List.free ( List_adr -- )
@ free
if
." free failed! "
else
." free ok!"
then
;
: >List ( n List_adr -- )
@ 4 + >r
r@ @ 1 + r@ !
r@ 4 +
r> @ 1 - 4 * + !
;
: List@ ( n List_adr -- m )
@ 4 + >r
1 - 4 *
r> 4 +
+
@
;
: List> ( List_adr -- n )
@ 4 + >r
r@ 4 +
r@ @ 1 - 4 * + @ \
r@ @ 1 - r> !
;
1024 List List_name
\ ((
1 List_name >List
2 List_name >List
3 List_name >List
4 List_name >List
\ ))
List_name @ 100 dump cr
1 List_name List@ . cr
2 List_name List@ . cr
3 List_name List@ . cr
4 List_name List@ . cr
List_name List> . cr
List_name List> . cr
List_name List> . cr
List_name List> . cr
cr List_name List.free
FLOAD 'D:\Forth\Libary\資料結構\List\List.f'
768ACB8 | 00 04 00 00 04 00 00 00 01 00 00 00 02 00 00 00 |................|
768ACC8 | 03 00 00 00 04 00 00 00 F8 CD 7C 07 0C 00 00 00 |........雥|.....|
768ACD8 | B0 2D 04 01 0C 00 00 00 B0 D1 7C 07 0C 00 00 00 |?......參|.....|
768ACE8 | 58 D4 7C 07 0C 00 00 00 38 D2 7C 07 0C 00 00 00 |X唰.....8烡.....|
768ACF8 | C0 22 7B 07 0C 00 00 00 98 C7 7C 07 0C 00 00 00 |?{.....|.....|
768AD08 | 00 00 00 00 00 00 00 00 2D 00 01 2C F0 79 10 08 |........-..,羳..|
768AD18 | 00 00 00 00 |....|
1
2
3
4
4
3
2
1
free ok! ok