Use new-style structs for overlapped struct on Windows
parent
9881332ddb
commit
75f7e27c6c
|
@ -14,11 +14,11 @@ TUPLE: io-callback port thread ;
|
||||||
C: <io-callback> io-callback
|
C: <io-callback> io-callback
|
||||||
|
|
||||||
: (make-overlapped) ( -- overlapped-ext )
|
: (make-overlapped) ( -- overlapped-ext )
|
||||||
"OVERLAPPED" malloc-object &free ;
|
OVERLAPPED malloc-struct &free ;
|
||||||
|
|
||||||
: make-overlapped ( port -- overlapped-ext )
|
: make-overlapped ( port -- overlapped-ext )
|
||||||
[ (make-overlapped) ] dip
|
[ (make-overlapped) ] dip
|
||||||
handle>> ptr>> [ over set-OVERLAPPED-offset ] when* ;
|
handle>> ptr>> [ >>offset ] when* ;
|
||||||
|
|
||||||
M: winnt FileArgs-overlapped ( port -- overlapped )
|
M: winnt FileArgs-overlapped ( port -- overlapped )
|
||||||
make-overlapped ;
|
make-overlapped ;
|
||||||
|
@ -40,7 +40,7 @@ M: winnt add-completion ( win32-handle -- )
|
||||||
: twiddle-thumbs ( overlapped port -- bytes-transferred )
|
: twiddle-thumbs ( overlapped port -- bytes-transferred )
|
||||||
[
|
[
|
||||||
drop
|
drop
|
||||||
[ pending-overlapped get-global set-at ] curry "I/O" suspend
|
[ >c-ptr pending-overlapped get-global set-at ] curry "I/O" suspend
|
||||||
{
|
{
|
||||||
{ [ dup integer? ] [ ] }
|
{ [ dup integer? ] [ ] }
|
||||||
{ [ dup array? ] [
|
{ [ dup array? ] [
|
||||||
|
@ -57,11 +57,12 @@ M: winnt add-completion ( win32-handle -- )
|
||||||
f <void*> [ ! overlapped
|
f <void*> [ ! overlapped
|
||||||
us [ 1000 /i ] [ INFINITE ] if* ! timeout
|
us [ 1000 /i ] [ INFINITE ] if* ! timeout
|
||||||
GetQueuedCompletionStatus zero?
|
GetQueuedCompletionStatus zero?
|
||||||
] keep *void*
|
] keep
|
||||||
|
*void* dup [ OVERLAPPED memory>struct ] when
|
||||||
] keep *int spin ;
|
] keep *int spin ;
|
||||||
|
|
||||||
: resume-callback ( result overlapped -- )
|
: resume-callback ( result overlapped -- )
|
||||||
pending-overlapped get-global delete-at* drop resume-with ;
|
>c-ptr pending-overlapped get-global delete-at* drop resume-with ;
|
||||||
|
|
||||||
: handle-overlapped ( us -- ? )
|
: handle-overlapped ( us -- ? )
|
||||||
wait-for-overlapped [
|
wait-for-overlapped [
|
||||||
|
|
|
@ -210,12 +210,12 @@ C-ENUM:
|
||||||
|
|
||||||
TYPEDEF: uint COMPUTER_NAME_FORMAT
|
TYPEDEF: uint COMPUTER_NAME_FORMAT
|
||||||
|
|
||||||
C-STRUCT: OVERLAPPED
|
STRUCT: OVERLAPPED
|
||||||
{ "UINT_PTR" "internal" }
|
{ internal UINT_PTR }
|
||||||
{ "UINT_PTR" "internal-high" }
|
{ internal-high UINT_PTR }
|
||||||
{ "DWORD" "offset" }
|
{ offset DWORD }
|
||||||
{ "DWORD" "offset-high" }
|
{ offset-high DWORD }
|
||||||
{ "HANDLE" "event" } ;
|
{ event HANDLE } ;
|
||||||
|
|
||||||
STRUCT: SYSTEMTIME
|
STRUCT: SYSTEMTIME
|
||||||
{ wYear WORD }
|
{ wYear WORD }
|
||||||
|
|
Loading…
Reference in New Issue