[gforth] / gforth / environ.fs  

gforth: gforth/environ.fs


1 : anton 1.2 \ environmental queries
2 : anton 1.1
3 : anton 1.24 \ Copyright (C) 1995,1996,1997,1998,2000 Free Software Foundation, Inc.
4 : anton 1.8
5 :     \ This file is part of Gforth.
6 :    
7 :     \ Gforth is free software; you can redistribute it and/or
8 :     \ modify it under the terms of the GNU General Public License
9 :     \ as published by the Free Software Foundation; either version 2
10 :     \ of the License, or (at your option) any later version.
11 :    
12 :     \ This program is distributed in the hope that it will be useful,
13 :     \ but WITHOUT ANY WARRANTY; without even the implied warranty of
14 :     \ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 :     \ GNU General Public License for more details.
16 :    
17 :     \ You should have received a copy of the GNU General Public License
18 :     \ along with this program; if not, write to the Free Software
19 : anton 1.25 \ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
20 : anton 1.8
21 : pazsan 1.3 \ wordlist constant environment-wordlist
22 : anton 1.1
23 : anton 1.26 vocabulary environment ( -- ) \ gforth
24 :     \ for win32forth compatibility
25 :    
26 :     ' environment >body constant environment-wordlist ( -- wid ) \ gforth
27 : crook 1.20 \G @i{wid} identifies the word list that is searched by environmental
28 : crook 1.18 \G queries.
29 : anton 1.26
30 : pazsan 1.3
31 : anton 1.10 : environment? ( c-addr u -- false / ... true ) \ core environment-query
32 : crook 1.20 \G @i{c-addr, u} specify a counted string. If the string is not
33 :     \G recognised, return a @code{false} flag. Otherwise return a
34 :     \G @code{true} flag and some (string-specific) information about
35 :     \G the queried string.
36 : anton 1.2 environment-wordlist search-wordlist if
37 :     execute true
38 :     else
39 :     false
40 :     endif ;
41 :    
42 : jwilke 1.15 : e? name environment? 0= ABORT" environmental dependency not existing" ;
43 : jwilke 1.13
44 : pazsan 1.16 : has? name environment? 0= IF false THEN ;
45 : jwilke 1.14
46 : pazsan 1.16 : $has? environment? 0= IF false THEN ;
47 : jwilke 1.14
48 : anton 1.2 environment-wordlist set-current
49 :     get-order environment-wordlist swap 1+ set-order
50 :    
51 :     \ assumes that chars, cells and doubles use an integral number of aus
52 :    
53 :     \ this should be computed in C as CHAR_BITS/sizeof(char),
54 :     \ but I don't know any machine with gcc where an au does not have 8 bits.
55 : anton 1.7 8 constant ADDRESS-UNIT-BITS ( -- n ) \ environment
56 : crook 1.19 \G Size of one address unit, in bits.
57 : anton 1.2
58 : crook 1.18 1 ADDRESS-UNIT-BITS chars lshift 1- constant MAX-CHAR ( -- u ) \ environment
59 :     \G Maximum value of any character in the character set
60 : anton 1.1
61 : crook 1.18 MAX-CHAR constant /COUNTED-STRING ( -- n ) \ environment
62 :     \G Maximum size of a counted string, in characters.
63 : pazsan 1.3
64 : crook 1.18 ADDRESS-UNIT-BITS cells 2* 2 + constant /HOLD ( -- n ) \ environment
65 :     \G Size of the pictured numeric string output buffer, in characters.
66 :    
67 :     &84 constant /PAD ( -- n ) \ environment
68 :     \G Size of the scratch area pointed to by @code{PAD}, in characters.
69 :    
70 :     true constant CORE ( -- f ) \ environment
71 :     \G True if the complete core word set is present. Always true for Gforth.
72 :    
73 :     true constant CORE-EXT ( -- f ) \ environment
74 :     \G True if the complete core extension word set is present. Always true for Gforth.
75 :    
76 :     1 -3 mod 0< constant FLOORED ( -- f ) \ environment
77 : anton 1.21 \G True if @code{/} etc. perform floored division
78 : crook 1.18
79 :     1 ADDRESS-UNIT-BITS cells 1- lshift 1- constant MAX-N ( -- n ) \ environment
80 :     \G Largest usable signed integer.
81 :    
82 :     -1 constant MAX-U ( -- u ) \ environment
83 :     \G Largest usable unsigned integer.
84 :    
85 :     -1 MAX-N 2constant MAX-D ( -- d ) \ environment
86 :     \G Largest usable signed double.
87 :    
88 :     -1. 2constant MAX-UD ( -- ud ) \ environment
89 :     \G Largest usable unsigned double.
90 :    
91 :     version-string 2constant gforth ( -- c-addr u ) \ gforth-environment
92 : anton 1.22 \G Counted string representing a version string for this version of
93 :     \G Gforth (for versions>0.3.0). The version strings of the various
94 : anton 1.23 \G versions are guaranteed to be ordered lexicographically.
95 : anton 1.1
96 : crook 1.18 : return-stack-cells ( -- n ) \ environment
97 :     \G Maximum size of the return stack, in cells.
98 : anton 1.10 [ forthstart 6 cells + ] literal @ cell / ;
99 :    
100 : crook 1.18 : stack-cells ( -- n ) \ environment
101 :     \G Maximum size of the data stack, in cells.
102 : anton 1.10 [ forthstart 4 cells + ] literal @ cell / ;
103 :    
104 : crook 1.18 : floating-stack ( -- n ) \ environment
105 : crook 1.19 \G @var{n} is non-zero, showing that Gforth maintains a separate
106 :     \G floating-point stack of depth @var{n}.
107 : pazsan 1.11 [ forthstart 5 cells + ] literal @
108 :     [IFDEF] float float [ELSE] [ 1 floats ] Literal [THEN] / ;
109 : anton 1.10
110 : anton 1.5 \ !! max-float
111 : anton 1.6 15 constant #locals \ 1000 64 /
112 :     \ One local can take up to 64 bytes, the size of locals-buffer is 1000
113 : anton 1.5 maxvp constant wordlists
114 : anton 1.2
115 :     forth definitions
116 :     previous
117 : anton 1.1

CVS Admin

Powered by ViewCVS 1.0-dev
(Powered by ViewCVS)

ViewCVS and CVS Help