File:  [gforth] / gforth / kernel / Attic / special.fs
Revision 1.11: download - view: text, annotated - select for diffs
Thu May 6 21:33:37 1999 UTC (24 years, 7 months ago) by crook
Branches: MAIN
CVS tags: HEAD
Major re-write of manual sections concerning text interpreter and
defining words. Much fine-tuning of other sections. The manual is
``nearly finished'' -- at least, all the major pieces of work that
I envisaged for the first mods (which were only going to take a
couple of weeks...). The manual has grown from 127 pages to 192
which is good news in terms of content but bad news in terms of the
time it takes to print out on my HP550C DeskJet.

Other changes are just tweaks to glossary entries.

    1: \ words with non-default and non-immediate compilation semantics
    2: 
    3: \ Copyright (C) 1996,1998 Free Software Foundation, Inc.
    4: 
    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: \ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   20: 
   21: \ this file comes last, because these words override cross' words.
   22: 
   23: create s"-buffer /line chars allot
   24: has? compiler 0= 
   25: [IF] : s" [ELSE] :noname [THEN]
   26: 	[char] " parse
   27:     	/line min >r s"-buffer r@ cmove
   28:     	s"-buffer r> ;
   29: has? compiler [IF]
   30: :noname [char] " parse postpone SLiteral ;
   31: interpret/compile: S" ( compilation 'ccc"' -- ; run-time -- c-addr u )	\ core,file	s-quote
   32:   \G Compilation: Parse a string @i{ccc} delimited by a @code{"}
   33:   \G (double quote). At run-time, return the length, @i{u}, and the
   34:   \G start address, @i{c-addr} of the string. Interpretation: parse
   35:   \G the string as before, and return @i{c-addr}, @i{u}. The
   36:   \G string is stored in a temporary buffer which may be overwritten
   37:   \G by subsequent uses of @code{S"}.
   38: [THEN]
   39: 
   40: has? compiler [IF]
   41: : [IS] ( compilation "name" -- ; run-time xt -- ) \ possibly-gforth bracket-is
   42:     ' >body postpone ALiteral postpone ! ; immediate restrict
   43: 
   44: :noname    ' >body ! ;
   45: ' [IS]
   46: interpret/compile: IS ( xt "name" -- ) \ gforth
   47: 
   48: :noname    ' >body @ ;
   49: :noname    ' >body postpone ALiteral postpone @ ;
   50: interpret/compile: What's ( "name" -- addr ) \ gforth
   51: 
   52: :noname    [char] " parse type ;
   53: :noname    postpone (.") ,"  align ;
   54: interpret/compile: ." ( compilation 'ccc"' -- ; run-time -- )  \ core	dot-quote
   55:   \G Compilation: Parse a string @i{ccc} delimited by a " (double
   56:   \G quote). At run-time, display the string. Interpretation semantics
   57:   \G for this word are undefined in ANS Forth. Gforth's interpretation
   58:   \G semantics are to display the string. This is the simplest way to
   59:   \G display a string from within a definition; see examples below.
   60: 
   61: \ DOES>                                                17mar93py
   62: 
   63: :noname
   64:     dodoes, here !does ]
   65:     defstart :-hook ;
   66: :noname
   67:     ;-hook ?struc 
   68:     [ has? xconds [IF] ] exit-like [ [THEN] ]
   69:     postpone (does>) dodoes,
   70:     defstart :-hook ;
   71: interpret/compile: DOES>  ( compilation colon-sys1 -- colon-sys2 ; run-time nest-sys -- ) \ core	does
   72:     
   73: ' IS Alias TO ( w "name" -- ) \ core-ext
   74: immediate
   75: 
   76: [THEN]
   77: 
   78: has? compiler [IF]
   79: : interpret/compile? ( xt -- flag )
   80:     >does-code ['] S" >does-code = ;
   81: [ELSE]
   82: : interpret/compile?
   83:     false ;
   84: [THEN]
   85: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>