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 + -
显示快捷键?