in reply to Re^2: WIN32-API Purgetory
in thread WIN32-API Purgetory
Since someone managed to take offence at my previous purely factual post, I'll add a little opinion.
Please do not be defensive about your "Win32 developer"skills, nor take offense at my "royally screwed" remark. The problem that is apparently the cause of this has nothing to do with you, or your skills. There is no way that file should compile with unbalanced curlies in the C-level source code.
The problem lies entirely in the XS pre-preprocessor processing as far as I can tell. It all seems to come down to the bugbear that is XS programming, namely macro hell. The fact that my editor can detect the unbalanced curly in the source, but the compiler does not, indicates that the unbalanced curly is not making it into the compiler. Ie. the C-pre-processor is conditionally excluding the responsible bit of source before it gets to the C parsing phase.
The reason it hasn't show up as a compile time erro, is because it is in a piece of code conditionally included only for the Borland compiler, and no one uses that anymore. But that still doesn't explain how it can be affecting MSC builds?
I did try to examine the post preprocessor output (/E), but once you've run that, all of the XS and guts macros are expanded and it is nigh impossible to relate pre-processed C to post-processed C. Never mind pre-preprocessed XS to post-processed C.
I spent nearly 4 hours trying to understand what was going on. But as 735 lines of XS becomes 865 lines of C, becomes 114,700 lines of preprocessor output, it is a nearly pointless task. Even once you've discarded the 90,000 blank lines, it still leaves 25,600 to wade through. Even doing my best to whittle that lot down to just the stuff produced from the API.XS/API.c file, you still end up with 4000+ lines. And they look like this:
#line 22 "API.xs" #pragma optimize("", off) #line 41 "API.xs" #pragma warning( disable : 4003 ) #line 52 "API.xs" void pointerCallPack(SV* param, int idx, AV* types) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); SV* type; type = *( Perl_av_fetch(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0)))), types,idx,0) ); Perl_push_scope(((PerlInterpreter *)pthread_getspecific((*Perl_Gth +r_key_ptr(0))))); Perl_save_int(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_ +key_ptr(0)))), (int*)&(*Perl_Ttmps_floor_ptr(((PerlInterpreter *)pthr +ead_getspecific((*Perl_Gthr_key_ptr(0))))))), (*Perl_Ttmps_floor_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = + (*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0)))))); if (++(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0)))))) == (*Perl_Tmarkstack_max_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_m +arkstack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0))))); *(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0)))))) = (sp) - (*Perl_Tstack_base_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +; do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_st +ack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (Perl_sv_2mortal(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_ +newSVsv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0 +)))), type)))); } while (0); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_st +ack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (param)); } while (0 +); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; Perl_call_pv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0)))), "Win32::API::Type::Pack",2); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; if ((*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0)))))) > (*Perl_Ttmps_floor_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_free_tmps(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))); Perl_pop_scope(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0))))); } void pointerCallUnpack(SV* param, int idx, AV* types) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); SV* type; type = *( Perl_av_fetch(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0)))), types,idx,0) ); Perl_push_scope(((PerlInterpreter *)pthread_getspecific((*Perl_Gth +r_key_ptr(0))))); Perl_save_int(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_ +key_ptr(0)))), (int*)&(*Perl_Ttmps_floor_ptr(((PerlInterpreter *)pthr +ead_getspecific((*Perl_Gthr_key_ptr(0))))))), (*Perl_Ttmps_floor_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = + (*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0)))))); if (++(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0)))))) == (*Perl_Tmarkstack_max_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_m +arkstack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0))))); *(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0)))))) = (sp) - (*Perl_Tstack_base_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +; do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_st +ack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (Perl_sv_2mortal(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_ +newSVsv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0 +)))), type)))); } while (0); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_st +ack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (param)); } while (0 +); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; Perl_call_pv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0)))), "Win32::API::Type::Unpack",2); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; if ((*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0)))))) > (*Perl_Ttmps_floor_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_free_tmps(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))); Perl_pop_scope(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0))))); } #line 123 "API.c" void XS_Win32__API_LoadLibrary(register PerlInterpreter *my_perl , CV* + cv); void XS_Win32__API_LoadLibrary(register PerlInterpreter *my_perl , CV* + cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::LoadLibrary(name)"); { char * name = (char *)((((*Perl_Tstack_base_ptr(((PerlInterpret +er *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_f +lags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_Tstack_base_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[a +x + (0)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + + (0)])); HINSTANCE RETVAL; SV * targ = (((*Perl_Top_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0))))))->op_private & 32) ? ((*Perl_Tcurpad_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +[(*Perl_Top_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0))))))->op_targ]) : Perl_sv_newmortal(((PerlInterpreter *)pth +read_getspecific((*Perl_Gthr_key_ptr(0)))))); #line 121 "API.xs" RETVAL = LoadLibraryA(name); #line 136 "API.c" (sp = (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))))) + ax - 1); do { Perl_sv_setiv(((PerlIn +terpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), targ,(IV)( +(IV)RETVAL)); do { do { if (((targ)->sv_flags & 0x00004000)) Perl_mg_ +set(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, targ); } while (0); (*++sp = (targ)); } while (0); } while (0); } do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } void XS_Win32__API_GetProcAddress(register PerlInterpreter *my_perl , +CV* cv); void XS_Win32__API_GetProcAddress(register PerlInterpreter *my_perl , +CV* cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 2) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::GetProcAddress(library, name)"); { HINSTANCE library = (HINSTANCE)((((*Perl_Tstack_base_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0 +)])->sv_flags & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((Per +lInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + ( +0)])->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])); char * name = (char *)((((*Perl_Tstack_base_ptr(((PerlInterpret +er *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (1)])->sv_f +lags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_Tstack_base_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[a +x + (1)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + + (1)])); long RETVAL; SV * targ = (((*Perl_Top_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0))))))->op_private & 32) ? ((*Perl_Tcurpad_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +[(*Perl_Top_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0))))))->op_targ]) : Perl_sv_newmortal(((PerlInterpreter *)pth +read_getspecific((*Perl_Gthr_key_ptr(0)))))); #line 130 "API.xs" RETVAL = (long) GetProcAddress(library, name); #line 155 "API.c" (sp = (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))))) + ax - 1); do { Perl_sv_setiv(((PerlIn +terpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), targ,(IV)( +(IV)RETVAL)); do { do { if (((targ)->sv_flags & 0x00004000)) Perl_mg_ +set(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, targ); } while (0); (*++sp = (targ)); } while (0); } while (0); } do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } void XS_Win32__API_FreeLibrary(register PerlInterpreter *my_perl , CV* + cv); void XS_Win32__API_FreeLibrary(register PerlInterpreter *my_perl , CV* + cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::FreeLibrary(library)"); { HINSTANCE library = (HINSTANCE)((((*Perl_Tstack_base_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0 +)])->sv_flags & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((Per +lInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + ( +0)])->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])); char RETVAL; #line 138 "API.xs" RETVAL = FreeLibrary(library); #line 172 "API.c" (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0))))))[ax + (0)] = ((RETVAL) ? &(*Perl_Isv_yes_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) : + &(*Perl_Isv_no_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0))))))); Perl_sv_2mortal(((PerlInterpreter *)pthread_getspecific((*Perl_Gth +r_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)]); } do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } void XS_Win32__API_IsUnicode(register PerlInterpreter *my_perl , CV* c +v); void XS_Win32__API_IsUnicode(register PerlInterpreter *my_perl , CV* c +v) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 0) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::IsUnicode()"); { char RETVAL; #line 145 "API.xs" RETVAL = (0); #line 150 "API.xs" #line 193 "API.c" (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0))))))[ax + (0)] = ((RETVAL) ? &(*Perl_Isv_yes_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) : + &(*Perl_Isv_no_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0))))))); Perl_sv_2mortal(((PerlInterpreter *)pthread_getspecific((*Perl_Gth +r_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)]); } do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } void XS_Win32__API_ToUnicode(register PerlInterpreter *my_perl , CV* c +v); void XS_Win32__API_ToUnicode(register PerlInterpreter *my_perl , CV* c +v) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::ToUnicode(string)"); sp -= items; { LPCSTR string = (LPCSTR)((((*Perl_Tstack_base_ptr(((PerlInterpr +eter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv +_flags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_Tstack_base_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +[ax + (0)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((PerlInterpreter *) +pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr +(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ +ax + (0)])); #line 158 "API.xs" LPWSTR uString = 0; int uStringLen; #line 212 "API.c" #line 161 "API.xs" uStringLen = MultiByteToWideChar(0, 0, string, -1, uString, 0); if(uStringLen) { uString = (LPWSTR) Perl_safesysmalloc(uStringLen * 2); if(MultiByteToWideChar(0, 0, string, -1, uString, uStringLen)) + { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((PerlI +nterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_newS +Vpv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, (char *) uString,0))); Perl_safesysfree(uString); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpr +eter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstac +k_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_pt +r(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } else { Perl_safesysfree(uString); do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_no_ptr +(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } while (0); } } else { do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_no_ptr(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) ); d +o { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthre +ad_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) + +ax + (tmpXSoff - 1); return; } while (0); } while (0); } #line 228 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void XS_Win32__API_FromUnicode(register PerlInterpreter *my_perl , CV* + cv); void XS_Win32__API_FromUnicode(register PerlInterpreter *my_perl , CV* + cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::FromUnicode(uString)"); sp -= items; { LPCWSTR uString = (LPCWSTR)((((*Perl_Tstack_base_ptr(((PerlInte +rpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])- +>sv_flags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_Tstack_base +_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))) +)))[ax + (0)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((PerlInterpreter + *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ +ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +))[ax + (0)])); #line 181 "API.xs" LPSTR string = 0; int stringLen; #line 246 "API.c" #line 184 "API.xs" stringLen = WideCharToMultiByte(0, 0, uString, -1, string, 0, 0, 0 +); if(stringLen) { string = (LPSTR) Perl_safesysmalloc(stringLen); if(WideCharToMultiByte(0, 0, uString, -1, string, stringLen, 0 +, 0)) { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((PerlI +nterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_newS +Vpv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, (char *) string,0))); Perl_safesysfree(string); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpr +eter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstac +k_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_pt +r(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } else { Perl_safesysfree(string); do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_no_ptr +(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); } while (0); } } else { do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_no_ptr(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) ); d +o { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthre +ad_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) + +ax + (tmpXSoff - 1); return; } while (0); } while (0); } #line 262 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void XS_Win32__API_PointerTo(register PerlInterpreter *my_perl , CV* c +v); void XS_Win32__API_PointerTo(register PerlInterpreter *my_perl , CV* c +v) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (0) ax = ax; sp -= items; { #line 208 "API.xs" do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_getspec +ific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_stack_g +row(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, sp,sp,(int) (1)); } } while (0); ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((PerlInterpret +er *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_newSViv(((Pe +rlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (long) + ((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_flags & (0x00040000)) == 0x0 +0040000 ? ((XPV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread +_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_any)->xpv_pv +: Perl_sv_2pv_nolen(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_ +getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])))) ); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); #line 279 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void XS_Win32__API_PointerAt(register PerlInterpreter *my_perl , CV* c +v); void XS_Win32__API_PointerAt(register PerlInterpreter *my_perl , CV* c +v) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::PointerAt(addr)"); sp -= items; { long addr = (long)((((*Perl_Tstack_base_ptr(((PerlInterpreter * +)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_flags + & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_any) +->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecific((*Perl +_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthre +ad_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])); #line 216 "API.xs" do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_getspec +ific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_stack_g +row(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, sp,sp,(int) (1)); } } while (0); ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((PerlInterpret +er *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_newSVpv(((Pe +rlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (char +*) ((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific( +(*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_flags & 0x00010000) ? ((XP +VIV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific +((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_any)->xiv_iv : Perl_sv_2i +v(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), +(*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl +_Gthr_key_ptr(0))))))[ax + (0)])),0))); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); #line 298 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void XS_Win32__API_ReadMemory(register PerlInterpreter *my_perl , CV* +cv); void XS_Win32__API_ReadMemory(register PerlInterpreter *my_perl , CV* +cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items != 2) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::ReadMemory(addr, len)"); sp -= items; { long addr = (long)((((*Perl_Tstack_base_ptr(((PerlInterpreter * +)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_flags + & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])->sv_any) +->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecific((*Perl +_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthre +ad_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)])); long len = (long)((((*Perl_Tstack_base_ptr(((PerlInterpreter *) +pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (1)])->sv_flags +& 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter * +)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (1)])->sv_any)- +>xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecific((*Perl_ +Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (1)])); #line 225 "API.xs" do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_getspec +ific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_stack_g +row(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, sp,sp,(int) (1)); } } while (0); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_st +ack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (Perl_sv_2mortal(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_ +newSVpv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0 +)))), (char *) addr,len)))); } while (0); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +) + ax + (tmpXSoff - 1); return; } while (0); #line 318 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void XS_Win32__API_Call(register PerlInterpreter *my_perl , CV* cv); void XS_Win32__API_Call(register PerlInterpreter *my_perl , CV* cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; if (items < 1) Perl_croak(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))), "Usage: Win32::API::Call(api, ...)"); sp -= items; { SV * api = (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)]; #line 233 "API.xs" FARPROC ApiFunction; APIPARAM *params; SV** origST; ApiPointer *ApiFunctionPointer; ApiNumber *ApiFunctionNumber; ApiFloat *ApiFunctionFloat; ApiDouble *ApiFunctionDouble; ApiVoid *ApiFunctionVoid; ApiInteger *ApiFunctionInteger; long lParam; float fParam; double dParam; char *pParam; LPBYTE ppParam; int iReturn; long lReturn; float fReturn; double dReturn; char *pReturn; char *cReturn; HV* obj; SV** obj_proc; SV** obj_proto; SV** obj_in; SV** obj_out; SV** obj_intypes; SV** in_type; AV* inlist; AV* intypes; AV* pparray; SV** ppref; SV** code; int nin, tin, tout, i; BOOL has_proto = (0); obj = (HV*) ((XRV*) (api)->sv_any)->xrv_rv; obj_proc = Perl_hv_fetch(((PerlInterpreter *)pthread_getspecific(( +*Perl_Gthr_key_ptr(0)))), obj,"proc",4,(0)); ApiFunction = (FARPROC) (((*obj_proc)->sv_flags & 0x00010000) ? (( +XPVIV*) (*obj_proc)->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), *obj_proc)); obj_proto = Perl_hv_fetch(((PerlInterpreter *)pthread_getspecific( +(*Perl_Gthr_key_ptr(0)))), obj,"proto",5,(0)); if(obj_proto != 0 && (((*obj_proto)->sv_flags & 0x00010000) ? ((XP +VIV*) (*obj_proto)->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter * +)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), *obj_proto))) { has_proto = (1); obj_intypes = Perl_hv_fetch(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0)))), obj,"intypes",7,(0)); intypes = (AV*) ((XRV*) (*obj_intypes)->sv_any)->xrv_rv; } obj_in = Perl_hv_fetch(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0)))), obj,"in",2,(0)); obj_out = Perl_hv_fetch(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0)))), obj,"out",3,(0)); inlist = (AV*) ((XRV*) (*obj_in)->sv_any)->xrv_rv; nin = Perl_av_len(((PerlInterpreter *)pthread_getspecific((*Perl_ +Gthr_key_ptr(0)))), inlist); tout = (((*obj_out)->sv_flags & 0x00010000) ? ((XPVIV*) (*obj_out) +->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))), *obj_out)); if(items-1 != nin+1) { Perl_croak_nocontext("Wrong number of parameters: expected %d, + got %d.\n", nin+1, items-1); } if(nin >= 0) { params = (APIPARAM *) Perl_safesysmalloc((nin+1) * sizeof(APIP +ARAM)); origST = (SV**) Perl_safesysmalloc((nin+1) * sizeof(SV*)); for(i = 0; i <= nin; i++) { in_type = Perl_av_fetch(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0)))), inlist,i,0); tin = (((*in_type)->sv_flags & 0x00010000) ? ((XPVIV*) (*i +n_type)->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))), *in_type)); switch(tin) { case 1: params[i].t = 1; params[i].l = ((((*Perl_Tstack_base_ptr(((PerlInterpre +ter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->s +v_flags & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((PerlInter +preter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)]) +->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterprete +r *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])); break; case 6: params[i].t = 6; params[i].p = (char *) ((((*Perl_Tstack_base_ptr(((Per +lInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + ( +i+1)])->sv_flags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_Tsta +ck_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_p +tr(0))))))[ax + (i+1)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((PerlIn +terpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tst +ack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ +ptr(0))))))[ax + (i+1)])); params[i].l = (long) (params[i].p)[0]; break; case 4: params[i].t = 4; params[i].f = ((((*Perl_Tstack_base_ptr(((PerlInterpre +ter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->s +v_flags & 0x00020000) ? ((XPVNV*)((*Perl_Tstack_base_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])- +>sv_any)->xnv_nv : Perl_sv_2nv(((PerlInterpreter *)pthread_getspecifi +c((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter + *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])); break; case 5: params[i].t = 5; params[i].d = ((((*Perl_Tstack_base_ptr(((PerlInterpre +ter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->s +v_flags & 0x00020000) ? ((XPVNV*)((*Perl_Tstack_base_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])- +>sv_any)->xnv_nv : Perl_sv_2nv(((PerlInterpreter *)pthread_getspecifi +c((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter + *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])); break; case 2: params[i].t = 2; origST[i] = (*Perl_Tstack_base_ptr(((PerlInterpreter * +)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)]; if(has_proto) { pointerCallPack((*Perl_Tstack_base_ptr(((PerlInter +preter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)], + i, intypes); params[i].p = (char *) ((((*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + + (i+1)])->sv_flags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*Perl_ +Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0))))))[ax + (i+1)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen(((Pe +rlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl +_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_ +key_ptr(0))))))[ax + (i+1)])); } else { if((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_flags +& 0x00010000) && ((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_flags & 0x +00010000) ? ((XPVIV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pth +read_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_any)->x +iv_iv : Perl_sv_2iv(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_ +getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])) == 0) { params[i].p = 0; } else { params[i].p = (char *) ((((*Perl_Tstack_base_p +tr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))) +)[ax + (i+1)])->sv_flags & (0x00040000)) == 0x00040000 ? ((XPV*) ((*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0))))))[ax + (i+1)])->sv_any)->xpv_pv : Perl_sv_2pv_nolen( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), (* +Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0))))))[ax + (i+1)])); } } break; case 22: params[i].t = 22; if((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_flags & 0x +00080000) && ((((XRV*) ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_any)-> +xrv_rv)->sv_flags & 0xff) == SVt_PVAV) { pparray = (AV*) ((XRV*) ((*Perl_Tstack_base_ptr((( +PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax ++ (i+1)])->sv_any)->xrv_rv; ppref = Perl_av_fetch(((PerlInterpreter *)pthread_ +getspecific((*Perl_Gthr_key_ptr(0)))), pparray,0,0); if(((*ppref)->sv_flags & 0x00010000) && (((*ppref) +->sv_flags & 0x00010000) ? ((XPVIV*) (*ppref)->sv_any)->xiv_iv : Perl +_sv_2iv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0 +)))), *ppref)) == 0) { params[i].b = 0; } else { params[i].b = (LPBYTE) (((*ppref)->sv_flags & +(0x00040000)) == 0x00040000 ? ((XPV*) (*ppref)->sv_any)->xpv_pv : Per +l_sv_2pv_nolen(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_ke +y_ptr(0)))), *ppref)); } } else { Perl_croak_nocontext("Win32::API::Call: parameter +%d must be an array reference!\n", i+1); } break; case 3: params[i].t = 1; params[i].l = (long) (int) ((((*Perl_Tstack_base_ptr(( +(PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + + (i+1)])->sv_flags & 0x00010000) ? ((XPVIV*) ((*Perl_Tstack_base_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +[ax + (i+1)])->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterpreter *)pthr +ead_getspecific((*Perl_Gthr_key_ptr(0)))), (*Perl_Tstack_base_ptr(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + + (i+1)])); break; case 51: { MAGIC* mg; params[i].t = 51; if((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_flags +& 0x00080000)) { mg = Perl_mg_find(((PerlInterpreter *)pthread_ +getspecific((*Perl_Gthr_key_ptr(0)))), ((XRV*) ((*Perl_Tstack_base_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +[ax + (i+1)])->sv_any)->xrv_rv,'P'); if(mg != 0) { origST[i] = mg->mg_obj; } else { origST[i] = (*Perl_Tstack_base_ptr(((PerlI +nterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+ +1)]; } } } break; case 101: params[i].t = 101; if((((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)])->sv_flags & 0x +00080000)) { code = Perl_hv_fetch(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0)))), (HV*) ((XRV*) ((*Perl_Tstack_ba +se_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0) +)))))[ax + (i+1)])->sv_any)->xrv_rv,"code",4,0); if(code != 0) { params[i].l = (((*code)->sv_flags & 0x00010000 +) ? ((XPVIV*) (*code)->sv_any)->xiv_iv : Perl_sv_2iv(((PerlInterprete +r *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), *code)); origST[i] = (*Perl_Tstack_base_ptr(((PerlInter +preter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))[ax + (i+1)]; } else { Perl_croak_nocontext("Win32::API::Call: parame +ter %d must be a Win32::API::Callback object!\n", i+1); } } else { Perl_croak_nocontext("Win32::API::Call: parameter +%d must be a Win32::API::Callback object!\n", i+1); } break; } } for(i = 0; i <= nin; i++) { if(params[i].t == 51) { SV** buffer; int count; Perl_push_scope(((PerlInterpreter *)pthread_getspecifi +c((*Perl_Gthr_key_ptr(0))))); Perl_save_int(((PerlInterpreter *)pthread_getspecific( +(*Perl_Gthr_key_ptr(0)))), (int*)&(*Perl_Ttmps_floor_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))), (*Perl_Ttmp +s_floor_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_p +tr(0)))))) = (*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspeci +fic((*Perl_Gthr_key_ptr(0)))))); if (++(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0)))))) == (*Perl_Tmarkstack_ma +x_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)) +))))) Perl_markstack_grow(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0))))); *(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter + *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (sp) - (*Perl_Ts +tack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))))); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { +sp = Perl_stack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (Perl_sv +_2mortal(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), Perl_newSVsv(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))), origST[i])))); } while (0); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))))) = sp; count = Perl_call_method(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0)))), "Pack",2); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))))) = sp; if ((*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) > (*Perl_Ttmps_floor_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_f +ree_tmps(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0))))); Perl_pop_scope(((PerlInterpreter *)pthread_getspecific +((*Perl_Gthr_key_ptr(0))))); buffer = Perl_hv_fetch(((PerlInterpreter *)pthread_get +specific((*Perl_Gthr_key_ptr(0)))), (HV*) ((XRV*) (origST[i])->sv_any +)->xrv_rv,"buffer",6,0); if(buffer != 0) { params[i].p = (char *) (LPBYTE) (((*buffer)->sv_fl +ags & (0x00040000)) == 0x00040000 ? ((XPV*) (*buffer)->sv_any)->xpv_p +v : Perl_sv_2pv_nolen(((PerlInterpreter *)pthread_getspecific((*Perl_ +Gthr_key_ptr(0)))), *buffer)); } else { params[i].p = 0; } } if(params[i].t == 101) { int count; Perl_push_scope(((PerlInterpreter *)pthread_getspecifi +c((*Perl_Gthr_key_ptr(0))))); Perl_save_int(((PerlInterpreter *)pthread_getspecific( +(*Perl_Gthr_key_ptr(0)))), (int*)&(*Perl_Ttmps_floor_ptr(((PerlInterp +reter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))), (*Perl_Ttmp +s_floor_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_p +tr(0)))))) = (*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspeci +fic((*Perl_Gthr_key_ptr(0)))))); if (++(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0)))))) == (*Perl_Tmarkstack_ma +x_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)) +))))) Perl_markstack_grow(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0))))); *(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter + *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (sp) - (*Perl_Ts +tack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))))); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter +*)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { +sp = Perl_stack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (origST[ +i])); } while (0); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))))) = sp; count = Perl_call_method(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0)))), "PushSelf",2); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0)))))) = sp; if ((*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_ge +tspecific((*Perl_Gthr_key_ptr(0)))))) > (*Perl_Ttmps_floor_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_f +ree_tmps(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0))))); Perl_pop_scope(((PerlInterpreter *)pthread_getspecific +((*Perl_Gthr_key_ptr(0))))); } } for(i = nin; i >= 0; i--) { switch(params[i].t) { case 2: case 51: pParam = params[i].p; { __asm { mov eax, dword ptr pParam }; __asm { push ea +x }; }; break; case 22: ppParam = params[i].b; { __asm { mov eax, dword ptr ppParam }; __asm { push e +ax }; }; break; case 1: case 6: lParam = params[i].l; { __asm { mov eax, lParam }; __asm { push eax }; }; break; case 4: fParam = params[i].f; { __asm { mov eax, fParam }; __asm { push eax }; }; break; case 5: dParam = params[i].d; __asm { mov eax, dword ptr [dParam + 4] ; push eax ; mov eax, dword ptr [dParam] ; push eax ; }; #line 557 "API.xs" break; case 101: lParam = params[i].l; { __asm { mov eax, lParam }; __asm { push eax }; }; break; } } } switch(tout) { case 1: ApiFunctionNumber = (ApiNumber *) ApiFunction; lReturn = ApiFunctionNumber(); break; case 4: ApiFunctionFloat = (ApiFloat *) ApiFunction; break; case 5: ApiFunctionDouble = (ApiDouble *) ApiFunction; fReturn = ApiFunctionDouble(); #line 606 "API.xs" break; case 2: ApiFunctionPointer = (ApiPointer *) ApiFunction; pReturn = ApiFunctionPointer(); cReturn = (char *) Perl_safesysmalloc(strlen(pReturn)); strcpy(cReturn, pReturn); break; case 3: ApiFunctionInteger = (ApiInteger *) ApiFunction; iReturn = ApiFunctionInteger(); break; case 0: default: ApiFunctionVoid = (ApiVoid *) ApiFunction; ApiFunctionVoid(); break; } for(i = 0; i <= nin; i++) { if(params[i].t == 2 && has_proto) { pointerCallUnpack(origST[i], i, intypes); } if(params[i].t == 51) { Perl_push_scope(((PerlInterpreter *)pthread_getspecific((* +Perl_Gthr_key_ptr(0))))); Perl_save_int(((PerlInterpreter *)pthread_getspecific((*Pe +rl_Gthr_key_ptr(0)))), (int*)&(*Perl_Ttmps_floor_ptr(((PerlInterprete +r *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))), (*Perl_Ttmps_fl +oor_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0 +)))))) = (*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspecific( +(*Perl_Gthr_key_ptr(0)))))); if (++(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))) == (*Perl_Tmarkstack_max_pt +r(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) +) Perl_markstack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_ +Gthr_key_ptr(0))))); *(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)p +thread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (sp) - (*Perl_Tstack +_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr +(0)))))); do { do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = + Perl_stack_grow(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_ +key_ptr(0)))), sp,sp,(int) (1)); } } while (0); (*++sp = (origST[i])) +; } while (0); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))))) = sp; Perl_call_method(((PerlInterpreter *)pthread_getspecific(( +*Perl_Gthr_key_ptr(0)))), "Unpack",2); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0)))))) = sp; if ((*Perl_Ttmps_ix_ptr(((PerlInterpreter *)pthread_getspe +cific((*Perl_Gthr_key_ptr(0)))))) > (*Perl_Ttmps_floor_ptr(((PerlInte +rpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))) Perl_free_ +tmps(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))) +)); Perl_pop_scope(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0))))); } if(params[i].t == 22) { pparray = (AV*) ((XRV*) (origST[i])->sv_any)->xrv_rv; Perl_av_extend(((PerlInterpreter *)pthread_getspecific((*P +erl_Gthr_key_ptr(0)))), pparray,2); Perl_av_store(((PerlInterpreter *)pthread_getspecific((*Pe +rl_Gthr_key_ptr(0)))), pparray,1,Perl_newSViv(((PerlInterpreter *)pth +read_getspecific((*Perl_Gthr_key_ptr(0)))), *(params[i].b))); } } if(nin >= 0) { Perl_safesysfree(params); Perl_safesysfree(origST); } do { if ((*Perl_Tstack_max_ptr(((PerlInterpreter *)pthread_getspec +ific((*Perl_Gthr_key_ptr(0)))))) - sp < (int)(1)) { sp = Perl_stack_g +row(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))) +, sp,sp,(int) (1)); } } while (0); switch(tout) { case 1: do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_new +SViv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))) +), lReturn)) ); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlIn +terpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_ +Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } while (0 +); break; case 4: do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_new +SVnv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))) +), (double) fReturn)) ); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr +(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) += (*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Pe +rl_Gthr_key_ptr(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } + while (0); break; case 5: _asm { call dword ptr [ApiFunctionDouble] ; fstp qword ptr [dReturn] ; } #line 708 "API.xs" break; case 2: if(pReturn == 0) { do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal((( +PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl +_newSViv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), 0)) ); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInte +rpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Ts +tack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key +_ptr(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } while (0); } else { do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_g +etspecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal((( +PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl +_newSVpv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr( +0)))), cReturn,0))); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((P +erlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (* +Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_G +thr_key_ptr(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } whi +le (0); } break; case 3: do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = Perl_sv_2mortal(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))), Perl_new +SViv(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))) +), iReturn)) ); do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlIn +terpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_ +Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_k +ey_ptr(0)))))) + ax + (tmpXSoff - 1); return; } while (0); } while (0 +); break; case 0: default: do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getsp +ecific((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_undef_ptr( +((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0))))))); + do { IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pth +read_getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_ptr +(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) ++ ax + (tmpXSoff - 1); return; } while (0); } while (0); break; } #line 837 "API.c" (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_getspecific((*Per +l_Gthr_key_ptr(0)))))) = sp; return; } } void boot_Win32__API(register PerlInterpreter *my_perl , CV* cv); void boot_Win32__API(register PerlInterpreter *my_perl , CV* cv) { register SV **sp = (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthrea +d_getspecific((*Perl_Gthr_key_ptr(0)))))); register SV **mark = (*Per +l_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))))) + (*(*Perl_Tmarkstack_ptr_ptr(((PerlInterpreter *)pt +hread_getspecific((*Perl_Gthr_key_ptr(0))))))--); I32 ax = mark - (*P +erl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecific((*Perl_Gt +hr_key_ptr(0)))))) + 1; I32 items = sp - mark; char* file = "API.c"; ; Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::LoadLibrary",XS_Win32__API_LoadLibrary,f +ile); Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::GetProcAddress",XS_Win32__API_GetProcAdd +ress,file); Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::FreeLibrary",XS_Win32__API_FreeLibrary,f +ile); Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::IsUnicode",XS_Win32__API_IsUnicode,file) +; Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::ToUnicode",XS_Win32__API_ToUnicode,file) +; Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::FromUnicode",XS_Win32__API_FromUnicode,f +ile); Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::PointerTo",XS_Win32__API_PointerTo,file) +; Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::PointerAt",XS_Win32__API_PointerAt,file) +; Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::ReadMemory",XS_Win32__API_ReadMemory,fil +e); Perl_newXS(((PerlInterpreter *)pthread_getspecific((*Perl_Gthr +_key_ptr(0)))), "Win32::API::Call",XS_Win32__API_Call,file); do { ((*Perl_Tstack_base_ptr(((PerlInterpreter *)pthread_getspecif +ic((*Perl_Gthr_key_ptr(0))))))[ax + (0)] = &(*Perl_Isv_yes_ptr(((Perl +Interpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) ); do { + IV tmpXSoff = (1); (*Perl_Tstack_sp_ptr(((PerlInterpreter *)pthread_ +getspecific((*Perl_Gthr_key_ptr(0)))))) = (*Perl_Tstack_base_ptr(((Pe +rlInterpreter *)pthread_getspecific((*Perl_Gthr_key_ptr(0)))))) + ax ++ (tmpXSoff - 1); return; } while (0); } while (0); }
And I'm afraid that even if my editor could handle bracket matching in that lot, my brain can't. That's why I stay as far away from XS programming as I can. When it works it's fine. But when it stops working, the unix-centric documentation, total reluctance to share or help by the practitioners and sheer insanity of the macros make it a totally thankless task.
|
---|