go/ngaro

log tags | changeset raw browse | bz2 | zip | gz

changeset 51:b7d5185d0cf0 tip

fixes. float enabled accept
author yiyus@1936
date Sun Feb 21 20:48:43 2010 +0100 (2010-02-21 ago)
parents d5f450d8fec1
children
files inout.go
line diff
1.1 --- a/inout.go Sun Feb 21 18:07:23 2010 +0100 1.2 +++ b/inout.go Sun Feb 21 20:48:43 2010 +0100 1.3 @@ -6,13 +6,20 @@ 1.4 ( Input Output extension instructions: ) 1.5 1.6 1 7 << 1.7 - dup : $int? ( a-xf ) [ 1 or , ] ; dup : . ( x- ) [ 2 or , ] ; 1.8 - dup : $float? ( a-xf ) [ 3 or , ] ; dup : f. ( x- ) [ 4 or , ] ; 1.9 - dup : $accept ( ac- ) [ 5 or , ] ; dup : $. ( a- ) [ 6 or , ] ; 1.10 + dup : >int? ( a-xf ) [ 1 or , ] ; dup : . ( x- ) [ 2 or , ] ; 1.11 + dup : >float? ( a-xf ) [ 3 or , ] ; dup : f. ( x- ) [ 4 or , ] ; 1.12 + dup : <accept ( ca- ) [ 5 or , ] ; dup : $. ( a- ) [ 6 or , ] ; 1.13 drop 1.14 - 1.15 - : $"accept ( a- ) -1 $accept ; ( accepts until ' ', '\t' or '\n' ) 1.16 1.17 + : tib<accept ( c- ) ( accepts '\t' and '\n' as space ) 1.18 + dup 32 =if drop -1 then tib <accept ; 1.19 + 1.20 + : (accept) 1.21 + tib<accept 1.22 + tib >int? if .data rdrop listen ;then drop 1.23 + tib >float? if .data rdrop listen ;then drop 1.24 + ; 1.25 + ' (accept) is accept 1.26 */ 1.27 1.28 package ngaro 1.29 @@ -32,7 +39,7 @@ 1.30 WriteInt 1.31 ReadFloat 1.32 WriteFloat 1.33 - AcceptString // Not implemented 1.34 + AcceptString 1.35 WriteString 1.36 ) 1.37 1.38 @@ -76,7 +83,7 @@ 1.39 cs.data[*cs.sp] = 0 1.40 } else { 1.41 cs.data[*cs.sp-1] = i 1.42 - cs.data[*cs.sp] = 1 1.43 + cs.data[*cs.sp] = -1 1.44 } 1.45 case WriteInt: 1.46 fmt.Fprint(ioext.out, cs.data[*cs.sp]) 1.47 @@ -88,19 +95,19 @@ 1.48 cs.data[*cs.sp] = 0 1.49 } else { 1.50 cs.data[*cs.sp-1] = ftoi(f) 1.51 - cs.data[*cs.sp] = 1 1.52 + cs.data[*cs.sp] = -1 1.53 } 1.54 case WriteFloat: 1.55 fmt.Fprint(ioext.out, itof(cs.data[*cs.sp])) 1.56 *cs.sp-- 1.57 case AcceptString: 1.58 var c [1]byte 1.59 - a := cs.data[*cs.sp-1] 1.60 + a := cs.data[*cs.sp] 1.61 var cont func() bool 1.62 - if cs.data[*cs.sp] == -1 { 1.63 + if cs.data[*cs.sp-1] == -1 { 1.64 cont = func() bool { return c[0] != ' ' && c[0] != '\n' && c[0] != '\t' } 1.65 } else { 1.66 - cont = func() bool { return c[0] != byte(cs.data[*cs.sp]) } 1.67 + cont = func() bool { return c[0] != byte(cs.data[*cs.sp-1]) } 1.68 } 1.69 _, err := ioext.in.Read(c[0:]) 1.70 for ; err == nil && cont(); _, err = ioext.in.Read(c[0:]) { 1.71 @@ -108,7 +115,7 @@ 1.72 a++ 1.73 } 1.74 cs.img[a] = 0 1.75 - *cs.sp-- 1.76 + *cs.sp -= 2 1.77 case WriteString: 1.78 for i := cs.data[*cs.sp]; i < len(cs.img); i++ { 1.79 fmt.Fprintf(ioext.out, "%c", byte(cs.img[i]))