PFE - Portable Forth Environment - pfe Forth Wordsets

  PFE 0.33.71 Homepage SourceForge Download Documentation -Overview -The PFE Manual old manual / (book) -ChangeLog -Authors -License (LGPL) -Wordsets / (book) -Functions .. (book) -Dp of ANS Forth -The 4thTutor -Forthprimer.pdf - Old Wordsets - Old Words List Forth Links * Forth Repository * Taygeta Compilation * TinyBoot FirmWare * FiCL, Free Forth * Research Vienna * Research Bournemouth * zForth WebRing Other Links * Tektronix/MPT * Forth Org. (FIG) * Forth Inc. * MPE Ltd. Forths * SF Win32Forth * PD Win32Forth * Neil Bawd generated (C) Guido U. Draheim guidod@gmx.de | ## ZCHAR-EXT - zero-terminated C-like charstrings `Z"``( [chars<">] -- z* )``` => `[FORTH]` scan the input to the next doublequote and create a buffer that holds the chars - return the address of that zero-terminated string-buffer, either `POCKET-PAD` or `ALLOT`ed into the dictionary. compiling word = [p4_z_quote] `ZCOUNT``( z* -- z* len )``` => `[FORTH]` push length of z-string, additionally to the string addr itself.
        : ZSTRLEN ZCOUNT NIP ;
  (see libc strlen(3)) / compare with `COUNT` / `ZSTRLEN` primitive code = [p4_zcount] `ZSTRLEN``( z* -- len )``` => `[FORTH]` push length of z-string.
        : ZSTRLEN ZCOUNT NIP ;
(see libc strlen(3)) / compare with `ZMOVE` / `CMOVE` primitive code = [p4_zstrlen] `ZMOVE``( zsrc* zdest* -- )``` => `[FORTH]` copy a zero terminated string (see libc strcpy(3)) / compare with `ZSTRLEN` / `COUNT` primitive code = [p4_zmove] `ZPLACE``( addr* len zaddr* -- )``` => `[FORTH]` copy string and place as 0 terminated (see libc strncpy(3)) / see also `+ZPLACE` / `Z+PLACE` primitive code = [p4_zplace] `+ZPLACE``( caddr* u zdest* -- )``` => `[FORTH]` Add the string defined by CADDR LEN to the zero terminated string at ZDEST - (for older scripts the `SYNONYM` named `APPENDZ` exists) (see libc strncat(3)) / compare with `ZPLACE` / `+PLACE` primitive code = [p4_appendz] `S\"``( [backslashed-strings_<">] -- str cnt )``` => `[FORTH]` scan the following text to create a literal just like `S"` does, but backslashes can be used to escape special chars. The rules for the backslashes follow C literals, implemented techniques are \n \r \b \a \f \v \e \777 and all non-alnum chars represent themselves, esp. \" \' \ \? \! \% \( \) \[ \] \{ \} etcetera. most importantly the doublequote itself can be escaped. but be also informed that the usage of \' and \" is not portable as some systems preferred to map [\'] into ["]. Here I use the experimental addition to map [\q] to ["] and [\i] to ['] compiling word = [p4_s_backslash_quote] `C\"``( [backslashed-strings_<">] -- bstr* )``` => `[FORTH]` scan the following text to create a literal just like `C"` does, but backslashes can be used to escape special chars. The rules for the backslashes follow C literals, implemented techniques are \n \r \b \a \f \v \e \777 and all non-alnum chars represent themselves, esp. \" \' \ \? \! \% \( \) \[ \] \{ \} etcetera. most importantly the doublequote itself can be escaped. but be also informed that the usage of \' and \" is not portable as some systems preferred to map [\'] into ["]. Here I use the experimental addition to map [\q] to ["] and [\i] to ['] compiling word = [p4_c_backslash_quote] `Z\"``( [backslashed-strings_<">] -- zstr* )``` => `[FORTH]` scan the following text to create a literal just like `Z"` does, but backslashes can be used to escape special chars. The rules for the backslashes follow C literals, implemented techniques are \n \r \b \a \f \v \e \777 and all non-alnum chars represent themselves, esp. \" \' \ \? \! \% \( \) \[ \] \{ \} etcetera. most importantly the doublequote itself can be escaped but be also informed that the usage of \' and \" is not portable as some systems preferred to map [\'] into ["]. Here I use the experimental addition to map [\q] to ["] and [\i] to ['] compiling word = [p4_z_backslash_quote]