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 | ## Environment related definitions `ENVIRONMENT?``( name-ptr name-len -- 0 | ?? name-flag! )``[ANS]` => `[FORTH]` check the environment for a property, usually a condition like questioning the existance of specified wordset, but it can also return some implementation properties like "WORDLISTS" (the length of the search-order) or "#LOCALS" (the maximum number of locals) Here it implements the environment queries as a `SEARCH-WORDLIST` in a user-visible vocabulary called `ENVIRONMENT`
        : ENVIRONMENT?
          ['] ENVIRONMENT >WORDLIST SEARCH-WORDLIST
          IF  EXECUTE TRUE ELSE  FALSE THEN ;
  primitive code = [p4_environment_Q] `REQUIRED``( ... str-ptr str-len -- ??? )``` => `[FORTH]` the filename argument is loaded via `INCLUDED` as an extension package to the current system. The filename is registered in the current `ENVIRONMENT` so that it is only `INCLUDED` once (!!) if called multiple times via `REQUIRED` or `REQUIRES` primitive code = [p4_include_required] `REQUIRE``( ... "file-name" -- ... )``` => `[FORTH]` parses the next `WORD` and passes it to `REQUIRED` this is the self-parsing version of `REQUIRED` and it does parrallel `INCLUDE` w.r.t. `INCLUDED` primitive code = [p4_include_require] `NEEDS``( name -- )``` => `[FORTH]` A self-parsing variant of an environment-query check. It is similar to a simulation like
        : NEEDS PARSE-WORD 2DUP ENVIRONMENT?
          IF DROP ( extra value ) 2DROP ( success - be silent )
          ELSE TYPE ." not available " CR THEN ;
  however that would only match those worset-envqueries which return a single extra item under the uppermost TRUE flag in the success case. Instead it works more like
        : NEEDS PARSE-WORD 2DUP ENVIRONMENT-WORDLIST SEARCH-WORDLIST
          IF 2DROP ( success - be silent and just drop the parsed word )
          ELSE TYPE ." not available " CR THEN ;
  however we add the same extension as in `ENVIRONMENT`? as that it can automatically load a wordset module to fullfil a query that looks like "[wordsetname]-ext". Therefore, the following two lines are pretty much identical:
        LOADM floating
        NEEDS floating-ext
the difference between the two: if somebody did provide a forth level implementation of floating-ext then that implementation might have registered a hint "floating-ext" in the environment-wordlist. This extra-hint will inhibit loading of the binary module even if it exists and not been loaded so far. The `LOADM` however will not check the `ENVIRONMENT-WORDLIST` and only check its loadlist of binary wordset modules in the system. It is therefore recommended to use `NEEDS` instead of `LOADM` unless you know you want the binary module, quickly and uncondtionally. primitive code = [p4_needs_environment]