go/ngaro
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]))