string.fs
来自「BIOS Open Platform!」· FS 代码 · 共 128 行
FS
128 行
\ tag: misc useful functions\ \ Misc useful functions\ \ Copyright (C) 2003 Samuel Rydh\ \ See the file "COPYING" for further information about\ the copyright and warranty status of this work.\ \ compare c-string with (str len) pair : comp0 ( cstr str len -- 0|-1|1 ) 3dup comp ?dup if >r 3drop r> exit then nip + c@ 0<> if 1 else 0 then;\ returns 0 if the strings match: strcmp ( str1 len1 str2 len2 -- 0|1 ) rot over <> if 3drop 1 exit then comp if 1 else 0 then ; : strchr ( str len char -- where|0 ) >r begin 1- dup 0>= while ( str len ) over c@ r@ = if r> 2drop exit then swap 1+ swap repeat r> 3drop 0;: cstrlen ( cstr -- len ) dup begin dup c@ while 1+ repeat swap -;: strdup ( str len -- newstr len ) dup if dup >r dup alloc-mem dup >r swap move r> r> else 2drop 0 0 then;: dict-strdup ( str len -- dict-addr len ) dup here swap allot null-align swap 2dup >r >r move r> r>;\ -----------------------------------------------------\ string copy and cat variants\ -----------------------------------------------------: tmpstrcat ( addr2 len2 addr1 len1 tmpbuf -- buf len1+len2 tmpbuf+l1+l2 ) \ save return arguments dup 2 pick + 4 pick + >r ( R: buf+l1+l2 ) over 4 pick + >r dup >r \ copy... 2dup + >r swap move r> swap move r> r> r>;: tmpstrcpy ( addr1 len1 tmpbuf -- tmpbuf len1 tmpbuf+len1 ) swap 2dup >r >r move r> r> 2dup +;\ -----------------------------------------------------\ number to string conversion\ -----------------------------------------------------: numtostr ( num buf -- buf len ) swap rdepth -rot ( rdepth buf num ) begin base @ u/mod swap \ dup 0< if base @ + then dup a < if ascii 0 else ascii a a - then + >r ?dup 0= until rdepth rot - 0 ( buf len cnt ) begin r> over 4 pick + c! 1+ 2dup <= until drop;: tohexstr ( num buf -- buf len ) base @ hex -rot numtostr rot base !;: toudecstr ( num buf -- buf len ) base @ decimal -rot numtostr rot base !;: todecstr ( num buf -- buf len ) over 0< if swap negate over ascii - over c! 1+ ( buf num buf+1 ) toudecstr 1+ nip else toudecstr then;\ -----------------------------------------------------\ string to number conversion\ -----------------------------------------------------: parse-hex ( str len -- value ) base @ hex -rot $number if 0 then swap base !;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?