--- gforth/prim 2006/01/05 01:37:31 1.185 +++ gforth/prim 2006/02/04 22:09:11 1.188 @@ -719,6 +719,15 @@ c2 = toupper(c1); : dup [char] a - [ char z char a - 1 + ] Literal u< bl and - ; +capscompare ( c_addr1 u1 c_addr2 u2 -- n ) string +""Compare two strings lexicographically. If they are equal, @i{n} is 0; if +the first string is smaller, @i{n} is -1; if the first string is larger, @i{n} +is 1. Currently this is based on the machine's character +comparison. In the future, this may change to consider the current +locale and its collation order."" +/* close ' to keep fontify happy */ +n = capscompare(c_addr1, u1, c_addr2, u2); + /string ( c_addr1 u1 n -- c_addr2 u2 ) string slash_string ""Adjust the string specified by @i{c-addr1, u1} to remove @i{n} characters from the start of the string."" @@ -873,7 +882,7 @@ division by 2 (note that @code{/} not ne n2 = n1>>1; : dup MINI and IF 1 ELSE 0 THEN - [ bits/byte cell * 1- ] literal + [ bits/char cell * 1- ] literal 0 DO 2* swap dup 2* >r MINI and IF 1 ELSE 0 THEN or r> swap LOOP nip ; @@ -2444,23 +2453,29 @@ gforth_FP=fp; sp=(Cell*)(SYSCALL(Cell*(*)(Cell *, void *))u)(sp, &gforth_FP); fp=gforth_FP; -w@ ( a_addr -- u ) gforth wfetch -u = *(UWyde*)(a_addr); - -sw@ ( a_addr -- u ) gforth swfetch -u = *(Wyde*)(a_addr); - -w! ( u a_addr -- ) gforth wstore -*(Wyde*)(a_addr) = u; - -l@ ( a_addr -- u ) gforth lfetch -u = *(UTetrabyte*)(a_addr); - -sl@ ( a_addr -- u ) gforth slfetch -u = *(Tetrabyte*)(a_addr); - -l! ( u a_addr -- ) gforth lstore -*(Tetrabyte*)(a_addr) = u; +uw@ ( c_addr -- u ) gforth u_w_fetch +""@i{u} is the zero-extended 16-bit value stored at @i{c_addr}."" +u = *(UWyde*)(c_addr); + +sw@ ( c_addr -- n ) gforth s_w_fetch +""@i{n} is the sign-extended 16-bit value stored at @i{c_addr}."" +n = *(Wyde*)(c_addr); + +w! ( w c_addr -- ) gforth w_store +""Store the bottom 16 bits of @i{w} at @i{c_addr}."" +*(Wyde*)(c_addr) = w; + +ul@ ( c_addr -- u ) gforth u_l_fetch +""@i{u} is the zero-extended 32-bit value stored at @i{c_addr}."" +u = *(UTetrabyte*)(c_addr); + +sl@ ( c_addr -- n ) gforth s_l_fetch +""@i{n} is the sign-extended 32-bit value stored at @i{c_addr}."" +n = *(Tetrabyte*)(c_addr); + +l! ( w c_addr -- ) gforth l_store +""Store the bottom 32 bits of @i{w} at @i{c_addr}."" +*(Tetrabyte*)(c_addr) = w; \+FFCALL