slen = srclen - srcpos; dlen = dstlen - dstpos; if( srcpos < 0 || dstpos < 0 || slen < 0 || dlen < 0 ) hl_error("Out of range"); z->next_in = (Bytef*)(src + srcpos); z->next_out = (Bytef*)(dst + dstpos); z->avail_in = slen; z->avail_out = dlen; if( (err = deflate(z,zip->flush)) < 0 ) zlib_error(z,err); z->next_in = NULL; z->next_out = NULL; *read = slen - z->avail_in; *write = dlen - z->avail_out; return err == Z_STREAM_END; } HL_PRIM int HL_NAME(deflate_bound)( fmt_zip *zip, int size ) { return deflateBound(zip->z,size); } #define _ZIP _ABSTRACT(fmt_zip) DEFINE_PRIM(_ZIP, inflate_init, _I32); DEFINE_PRIM(_ZIP, deflate_init, _I32); DEFINE_PRIM(_I32, deflate_bound, _ZIP _I32); DEFINE_PRIM(_VOID, zip_end, _ZIP); DEFINE_PRIM(_VOID, zip_flush_mode, _ZIP _I32); DEFINE_PRIM(_BOOL, inflate_buffer, _ZIP _BYTES _I32 _I32 _BYTES _I32 _I32 _REF(_I32) _REF(_I32)); DEFINE_PRIM(_BOOL, deflate_buffer, _ZIP _BYTES _I32 _I32 _BYTES _I32 _I32 _REF(_I32) _REF(_I32));
return true; } #define _SOCK _ABSTRACT(hl_socket) DEFINE_PRIM(_VOID,socket_init,_NO_ARG); DEFINE_PRIM(_SOCK,socket_new,_BOOL); DEFINE_PRIM(_VOID,socket_close,_SOCK); DEFINE_PRIM(_I32,socket_send_char,_SOCK _I32); DEFINE_PRIM(_I32,socket_send,_SOCK _BYTES _I32 _I32 ); DEFINE_PRIM(_I32,socket_recv,_SOCK _BYTES _I32 _I32 ); DEFINE_PRIM(_I32,socket_recv_char, _SOCK); DEFINE_PRIM(_I32,host_resolve,_BYTES); DEFINE_PRIM(_BYTES,host_to_string,_I32); DEFINE_PRIM(_BYTES,host_reverse,_I32); DEFINE_PRIM(_BYTES,host_local,_NO_ARG); DEFINE_PRIM(_BOOL,socket_connect,_SOCK _I32 _I32); DEFINE_PRIM(_BOOL,socket_listen,_SOCK _I32); DEFINE_PRIM(_BOOL,socket_bind,_SOCK _I32 _I32); DEFINE_PRIM(_SOCK,socket_accept,_SOCK); DEFINE_PRIM(_BOOL,socket_peer,_SOCK _REF(_I32) _REF(_I32)); DEFINE_PRIM(_BOOL,socket_host,_SOCK _REF(_I32) _REF(_I32)); DEFINE_PRIM(_BOOL,socket_set_timeout,_SOCK _F64); DEFINE_PRIM(_BOOL,socket_shutdown,_SOCK _BOOL _BOOL); DEFINE_PRIM(_BOOL,socket_set_blocking,_SOCK _BOOL); DEFINE_PRIM(_BOOL,socket_set_fast_send,_SOCK _BOOL); DEFINE_PRIM(_I32, socket_send_to, _SOCK _BYTES _I32 _I32 _I32); DEFINE_PRIM(_I32, socket_recv_from, _SOCK _BYTES _I32 _REF(_I32) _REF(_I32)); DEFINE_PRIM(_I32, socket_fd_size, _I32 ); DEFINE_PRIM(_BOOL, socket_select, _ARR _ARR _ARR _BYTES _I32 _F64);
t.tm_mon = mo; t.tm_mday = d; t.tm_hour = h; t.tm_min = m; t.tm_sec = s; t.tm_isdst = -1; return (int)mktime(&t); } HL_PRIM void hl_date_get_inf( int date, int *y, int *mo, int *day, int *h, int *m, int *s, int *wday ) { struct tm t; time_t d = (time_t)(unsigned)date; if( !localtime_r(&d,&t) ) hl_error("invalid date"); if( y ) *y = t.tm_year + 1900; if( mo ) *mo = t.tm_mon; if( day ) *day = t.tm_mday; if( h ) *h = t.tm_hour; if( m ) *m = t.tm_min; if( s ) *s = t.tm_sec; if( wday ) *wday = t.tm_wday; } DEFINE_PRIM(_I32, date_now, _NO_ARG); DEFINE_PRIM(_BYTES, date_to_string, _I32 _REF(_I32)); DEFINE_PRIM(_F64, date_get_time, _I32); DEFINE_PRIM(_I32, date_from_time, _F64); DEFINE_PRIM(_I32, date_from_string, _BYTES _I32); DEFINE_PRIM(_I32, date_new, _I32 _I32 _I32 _I32 _I32 _I32); DEFINE_PRIM(_VOID, date_get_inf, _I32 _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32));
# else if( is64 ) return false; # endif CONTEXT c; c.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS; if( !GetThreadContext(OpenTID(thread),&c) ) return false; if( reg == 3 ) c.EFlags = (int)(int_val)value; else *GetContextReg(&c,reg) = (REGDATA)value; return (bool)SetThreadContext(OpenTID(thread),&c); # elif defined(USE_PTRACE) return ptrace(PTRACE_POKEUSER,thread,get_reg(reg),value) >= 0; # else return false; # endif } DEFINE_PRIM(_BOOL, debug_start, _I32); DEFINE_PRIM(_VOID, debug_stop, _I32); DEFINE_PRIM(_BOOL, debug_breakpoint, _I32); DEFINE_PRIM(_BOOL, debug_read, _I32 _BYTES _BYTES _I32); DEFINE_PRIM(_BOOL, debug_write, _I32 _BYTES _BYTES _I32); DEFINE_PRIM(_BOOL, debug_flush, _I32 _BYTES _I32); DEFINE_PRIM(_I32, debug_wait, _I32 _REF(_I32) _I32); DEFINE_PRIM(_BOOL, debug_resume, _I32 _I32); DEFINE_PRIM(_BYTES, debug_read_register, _I32 _I32 _I32 _BOOL); DEFINE_PRIM(_BOOL, debug_write_register, _I32 _I32 _I32 _BYTES _BOOL);