parent
b442096677
commit
a24ce9a88c
|
@ -2,7 +2,6 @@
|
|||
|
||||
- if external factor is down, don't add tons of random shit to the
|
||||
dictionary
|
||||
- plugin: type "re" in edit word dialog --> hang
|
||||
- word preview for parsing words
|
||||
|
||||
+ ui:
|
||||
|
|
|
@ -133,7 +133,16 @@ public class ExternalFactor extends VocabularyLookup
|
|||
|
||||
int responseLength = in.readInt();
|
||||
byte[] response = new byte[responseLength];
|
||||
in.readFully(response);
|
||||
|
||||
int n = 0;
|
||||
while (n < response.length)
|
||||
{
|
||||
int count = in.read(response,n,response.length - n);
|
||||
if (count < 0)
|
||||
throw new EOFException();
|
||||
System.err.println(new String(response,n,count));
|
||||
n += count;
|
||||
}
|
||||
|
||||
String responseStr = new String(response,"ASCII");
|
||||
return responseStr;
|
||||
|
|
|
@ -6,27 +6,30 @@ strings ;
|
|||
|
||||
TUPLE: buffer size ptr fill pos ;
|
||||
|
||||
: imalloc ( size -- address )
|
||||
"int" "libc" "malloc" [ "ulong" ] alien-invoke ;
|
||||
: malloc ( size -- address )
|
||||
"ulong" "libc" "malloc" [ "ulong" ] alien-invoke ;
|
||||
|
||||
: ifree ( address -- )
|
||||
: free ( address -- )
|
||||
"void" "libc" "free" [ "ulong" ] alien-invoke ;
|
||||
|
||||
: irealloc ( address size -- address )
|
||||
"int" "libc" "realloc" [ "ulong" "ulong" ] alien-invoke ;
|
||||
: realloc ( address size -- address )
|
||||
"ulong" "libc" "realloc" [ "ulong" "ulong" ] alien-invoke ;
|
||||
|
||||
: imemcpy ( dst src size -- )
|
||||
: memcpy ( dst src size -- )
|
||||
"void" "libc" "memcpy" [ "ulong" "ulong" "ulong" ] alien-invoke ;
|
||||
|
||||
: check-ptr ( ptr -- ptr )
|
||||
dup 0 = [ "Out of memory" throw ] when ;
|
||||
|
||||
C: buffer ( size -- buffer )
|
||||
2dup set-buffer-size
|
||||
swap imalloc swap [ set-buffer-ptr ] keep
|
||||
swap malloc check-ptr swap [ set-buffer-ptr ] keep
|
||||
0 swap [ set-buffer-fill ] keep
|
||||
0 swap [ set-buffer-pos ] keep ;
|
||||
|
||||
: buffer-free ( buffer -- )
|
||||
#! Frees the C memory associated with the buffer.
|
||||
dup buffer-ptr ifree 0 swap set-buffer-ptr ;
|
||||
dup buffer-ptr free 0 swap set-buffer-ptr ;
|
||||
|
||||
: buffer-contents ( buffer -- string )
|
||||
#! Returns the current contents of the buffer.
|
||||
|
@ -67,22 +70,29 @@ C: buffer ( size -- buffer )
|
|||
#! Returns the amount of data that may be added to the buffer.
|
||||
dup buffer-size swap buffer-fill - ;
|
||||
|
||||
: eof? ( buffer -- ? ) buffer-fill 0 = ;
|
||||
|
||||
: buffer-extend ( length buffer -- )
|
||||
#! Increases the size of the buffer by length.
|
||||
2dup buffer-ptr swap realloc check-ptr
|
||||
over set-buffer-ptr set-buffer-size ;
|
||||
|
||||
: check-overflow ( string buffer -- )
|
||||
buffer-capacity swap length < [
|
||||
"Buffer overflow" throw
|
||||
] when ;
|
||||
over length over buffer-capacity > [
|
||||
dup eof? [
|
||||
>r length r> buffer-extend
|
||||
] [
|
||||
"Buffer overflow" throw
|
||||
] ifte
|
||||
] [
|
||||
2drop
|
||||
] ifte ;
|
||||
|
||||
: >buffer ( string buffer -- )
|
||||
2dup check-overflow
|
||||
[ dup buffer-ptr swap buffer-fill + string>memory ] 2keep
|
||||
[ buffer-fill swap length + ] keep set-buffer-fill ;
|
||||
|
||||
: buffer-extend ( length buffer -- )
|
||||
#! Increases the size of the buffer by length.
|
||||
[ buffer-size + dup ] keep [ buffer-ptr swap ] keep
|
||||
>r irealloc r>
|
||||
[ set-buffer-ptr ] keep set-buffer-size ;
|
||||
|
||||
: n>buffer ( count buffer -- )
|
||||
#! Increases the fill pointer by count.
|
||||
[ buffer-fill + ] keep set-buffer-fill ;
|
||||
|
@ -97,7 +107,7 @@ C: buffer ( size -- buffer )
|
|||
|
||||
: buffer-append ( buffer buffer -- )
|
||||
#! Append first buffer to second buffer.
|
||||
2dup buffer-end over buffer-ptr rot buffer-fill imemcpy
|
||||
2dup buffer-end over buffer-ptr rot buffer-fill memcpy
|
||||
>r buffer-fill r> n>buffer ;
|
||||
|
||||
: buffer-set ( string buffer -- )
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
IN: temporary
|
||||
USE: namespaces
|
||||
USE: parser
|
||||
USE: streams
|
||||
USE: test
|
||||
USE: stdio
|
||||
USE: math
|
||||
USING: math parser stdio streams strings test ;
|
||||
|
||||
[ 4 ] [ "/library/test/io/no-trailing-eol.factor" run-resource ] unit-test
|
||||
|
||||
|
@ -52,3 +47,5 @@ USE: math
|
|||
[ -1 read ] unit-test-fails
|
||||
|
||||
[ "" ] [ 0 read ] unit-test
|
||||
|
||||
[ ] [ "123" write 9000 CHAR: x fill write flush ] unit-test
|
||||
|
|
|
@ -185,8 +185,6 @@ C: reader ( handle -- reader )
|
|||
drop
|
||||
] ifte ;
|
||||
|
||||
: eof? ( buffer -- ? ) buffer-fill 0 = ;
|
||||
|
||||
TUPLE: read-line-task ;
|
||||
|
||||
C: read-line-task ( port -- task )
|
||||
|
@ -295,8 +293,8 @@ C: writer ( fd -- writer )
|
|||
#! If the buffer is empty and the string is too long,
|
||||
#! extend the buffer.
|
||||
dup pending-error
|
||||
dup eof? >r 2dup buffer-capacity > r> and [
|
||||
buffer-extend t
|
||||
dup eof? [
|
||||
2drop t
|
||||
] [
|
||||
[ buffer-fill + ] keep buffer-capacity <=
|
||||
] ifte ;
|
||||
|
|
Loading…
Reference in New Issue