Annotation of gforth/kernel/errore.fs, revision 1.20

1.1       anton       1: \ ERRORE.FS English error strings                      9may93jaw
                      2: 
1.20    ! anton       3: \ Copyright (C) 1995,1996,1997,1998,1999,2000,2003,2006,2007,2012 Free Software Foundation, Inc.
1.1       anton       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
1.15      anton       9: \ as published by the Free Software Foundation, either version 3
1.1       anton      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
1.15      anton      18: \ along with this program. If not, see http://www.gnu.org/licenses/.
1.1       anton      19: 
                     20: 
                     21: \ The errors are defined by a linked list, for easy adding
                     22: \ and deleting. Speed is not neccassary at this point.
                     23: 
1.7       jwilke     24: require ./io.fs
                     25: require ./nio.fs
                     26: 
1.3       pazsan     27: AVariable ErrLink              \ Linked list entry point
1.1       anton      28: NIL ErrLink !
                     29: 
                     30: decimal
                     31: 
                     32: \ error numbers between -256 and -511 represent signals
                     33: \ signals are handled with strsignal
                     34: \ but some signals produce throw-codes > -256, e.g., -28
                     35: 
                     36: \ error numbers between -512 and -2047 are for OS errors and are
                     37: \ handled with strerror
                     38: 
1.5       pazsan     39: has? OS [IF]
1.3       pazsan     40: : >stderr ( -- )
1.19      pazsan     41:     r> outfile-id >r debug-fid to outfile-id
1.3       pazsan     42:     >exec  r> to outfile-id ;
1.5       pazsan     43: [THEN]
1.3       pazsan     44: 
1.17      pazsan     45: : error$ ( n -- addr u ) \ gforth
                     46:     \G converts an error to a string
1.1       anton      47:     ErrLink
                     48:     BEGIN @ dup
                     49:     WHILE
                     50:        2dup cell+ @ =
1.3       pazsan     51:        IF
1.17      pazsan     52:            2 cells + count rot drop EXIT THEN
1.1       anton      53:     REPEAT
                     54:     drop
1.2       jwilke     55: [ has? os [IF] ]
1.1       anton      56:     dup -511 -255 within
                     57:     IF
1.17      pazsan     58:        256 + negate strsignal EXIT
1.1       anton      59:     THEN
                     60:     dup -2047 -511 within
                     61:     IF
1.17      pazsan     62:        512 + negate strerror EXIT
1.1       anton      63:     THEN
                     64: [ [THEN] ]
1.17      pazsan     65:     base @ >r decimal
                     66:     s>d tuck dabs <# #s rot sign s" error #" holds #> r> base ! ;
                     67: 
                     68: : .error ( n -- )
                     69: [ has? OS [IF] ]
                     70:     >stderr
                     71: [ [THEN] ]
                     72:     error$ type ;

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