- Code: Select all
0 VALUE buf
10240 ALLOCATE THROW TO buf
S" long string less 10240 bytes"
DUP buf ! \ Сохраняем счетчик строки
buf CELL+ \ Пропускаем счетчик
SWAP CMOVE \ Перемещаем строку
0 buf @ buf CELL+ + ! \ Записываем в конец строки ноль (опционально)
buf CELL+ buf @ \ a u
- Code: Select all
: SPLACE \ ( a u buf -- )
>R
DUP R@ ! \ Сохраняем счетчик строки
R@ CELL+ \ Пропускаем счетчик
SWAP CMOVE \ Перемещаем строку
0 R@ @ R> CELL+ + ! \ Записываем в конец строки ноль (опционально)
;
: SCOUNT \ ( buf -- a u )
DUP CELL+ SWAP @
;
: +SPLACE \ ( a u buf -- )
DUP >R \ a u buf R: buf
SCOUNT + \ a u bufEnd R: buf
OVER R@ +! \ a u bufEnd
SWAP CMOVE
0 R> SCOUNT + !
;
Для работы с большими строками (сотни КБ и более) не следует использовать память, выделяемую через
USER-ALLOT и
ALLOT, т.к. данные блоки памяти распологаются в кодофайле, который ограничен размером в 1мб, при этом половина занята самим ннкроном.