--- gforth/kernel/saccept.fs 2000/09/23 15:47:12 1.6 +++ gforth/kernel/saccept.fs 2007/12/31 19:02:25 1.16 @@ -1,12 +1,12 @@ \ a very simple accept approach -\ Copyright (C) 1995,1996,1997,1998,1999 Free Software Foundation, Inc. +\ Copyright (C) 1995,1996,1997,1998,1999,2000,2003,2006,2007 Free Software Foundation, Inc. \ This file is part of Gforth. \ Gforth is free software; you can redistribute it and/or \ modify it under the terms of the GNU General Public License -\ as published by the Free Software Foundation; either version 2 +\ as published by the Free Software Foundation, either version 3 \ of the License, or (at your option) any later version. \ This program is distributed in the hope that it will be useful, @@ -15,20 +15,32 @@ \ GNU General Public License for more details. \ You should have received a copy of the GNU General Public License -\ along with this program; if not, write to the Free Software -\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. +\ along with this program. If not, see http://www.gnu.org/licenses/. require ./io.fs +\ : xon $11 emit ; +\ : xoff $13 emit ; + +Variable eof +Variable echo -1 echo ! + : accept ( adr len -- len ) - over + over ( start end pnt ) + ( xon ) over + over ( start end pnt ) eof off BEGIN key dup #del = IF drop #bs THEN dup bl u< - IF dup #cr = over #lf = or IF space drop nip swap - EXIT THEN - #bs = IF 3 pick over <> - IF 1 chars - #bs emit bl emit #bs emit ELSE bell THEN THEN - ELSE >r 2dup <> IF r> dup emit over c! char+ ELSE r> drop bell THEN + IF + dup #cr = over #lf = or IF + echo @ IF space THEN drop nip swap - ( xoff ) EXIT THEN + dup #eof = IF eof on THEN + #bs = IF 2 pick over <> + IF 1 chars - + echo @ IF #bs emit bl emit #bs emit THEN + ELSE echo @ IF bell THEN THEN THEN + ELSE >r 2dup <> IF r> + echo @ IF dup emit THEN + over c! char+ ELSE r> drop bell THEN THEN AGAIN ;